首页 > 其他分享 >Laravel执行流程(一)之请求周期

Laravel执行流程(一)之请求周期

时间:2023-09-21 12:34:44浏览次数:29  
标签:Laravel HTTP 请求 流程 中间件 应用程序 内核 路由

一、生命周期概述:

1.1、第一步:

Laravel 应用程序的所有请求的入口点都是 public/index.php 文件。

所有请求都由你的 web 服务器(Apache/Nginx)配置定向到此文件。

那个 index.php 文件不包含太多代码。相反,它是加载框架其余部分的起点。

该 index.php 文件将加载 Composer 生成的自动加载器定义,然后从 bootstrap/app.php 中检索 Laravel 应用程序的实例。

Laravel 本身采取的第一个操作是创建应用 / 服务容器 的实例。

 

1.2、HTTP 或 Console 内核

接下来,传入请求被发送到 HTTP 内核还是 Console 内核,具体取决于进入应用的请求类型。这两个内核充当所有请求流经的中心位置。现在,让我们只关注 HTTP 内核,它位于 app/Http/Kernel.php 中。
HTTP 内核扩展了 Illuminate\Foundation\HTTP\kernel 类,该类定义了一个将在执行请求之前运行的 bootstrappers 数组。这些引导程序用来配置异常处理、配置日志、检测应用程序环境 ,并执行在实际处理请求之前需要完成的其他任务。通常情况下,你不需要在意这些配置。
HTTP 内核还定义了一个 HTTP 中间件 列表,所有请求在被应用程序处理之前都必须通过该列表。这些中间件处理读写 HTTP 会话 ,确定应用程序是否处于维护模式,校验 CSRF 令牌 等等。我们接下来会做详细的讨论。
HTTP 内核的 handle 方法的签名非常简单:它接收 Request 接口并返回 Response 接口。把内核想象成一个代表整个应用程序的大黑匣子。向它提供 HTTP 请求,它将返回 HTTP 响应。

1.3、服务提供者

最重要的内核引导操作之一是为应用程序加载 service providers。应用程序的所有服务提供程序都在 config/app.php 中的 providers 数组。
Laravel 将遍历这个提供者列表并实例化它们中的每一个。实例化提供程序后,将对所有提供程序调用 register 方法。然后,一旦注册了所有提供程序,就会对每个提供程序调用 boot 方法。
服务提供者负责引导框架的所有不同组件,如数据库、队列、验证和路由组件。基本上,Laravel 提供的每个主要功能都是由服务提供商引导和配置的。由于它们引导和配置框架提供的许多特性,服务提供者是整个 Laravel 引导过程中最重要的部分。
您可能想知道,为什么在对任何服务提供者调用 boot 方法之前都要调用每个服务提供者的 register 方法。答案很简单。通过首先调用每个服务提供程序的 register 方法,服务提供者可能依赖于在执行 boot 方法时注册并可用的每个容器绑定。

 

1.4、路由

应用程序中最重要的服务提供者之一是 App\providers\RouteServiceProvider。此服务提供程序加载应用程序的 routes 目录中包含的路由文件。继续,打开 RouteServiceProvider 代码,看看它是如何工作的!
一旦应用程序被引导并且所有服务提供者都被注册,“请求” 将被传递给路由器进行调度。路由器将请求发送到路由或控制器,并运行任何路由特定的中间件。
中间件为过滤或检查进入应用程序的 HTTP 请求提供了一种方便的机制。例如,Laravel 包含一个这样的中间件,用于验证应用程序的用户是否经过身份验证。如果用户未通过身份验证,中间件将用户重定向到登录页。但是,如果用户经过身份验证,中间件将允许请求进一步进入应用程序。一些中间件被分配给应用程序中的所有路由,比如那些在 HTTP 内核的 $middleware 属性中定义的路由,而一些只被分配给特定的路由或路由组。您可以通过阅读完整的 中间件 文档来了解更多关于中间件的信息。
如果请求通过了所有匹配路由分配的中间件,则执行路由或控制器方法,并通过路由的中间件链路返回路由或控制器方法的响应。


1.5、最后

一旦路由或控制器方法返回一个响应,该响应将通过路由的中间件返回,从而使应用程序有机会修改或检查传出的响应。
最后,一旦响应通过中间件传回,HTTP 内核的 handle 方法将返回响应对象,并且 index.php 文件对返回的响应调用 send 方法。send 方法将响应内容发送到用户的 web 浏览器。至此,我们已经完成了整个 Laravel 请求生命周期的所有步骤!

标签:Laravel,HTTP,请求,流程,中间件,应用程序,内核,路由
From: https://www.cnblogs.com/shanhubei/p/17719664.html

相关文章

  • Python-多线程调用计算请求时间
    使用多线程调用某个方法(请求),计算每个线程消耗时间importthreadingimporttimeimportrequestsimportjsonimportconcurrent.futuresdefinput_req():url="https://xxxxxxxxxxxx"approval_content="nullain"payload=json.dumps({&quo......
  • systemd时代的开机启动流程(GPT+systemd)
    回到Systemd系列文章大纲systemd时代的开机启动流程(UEFI+systemd)计算机启动流程可以分为几个大阶段:内核加载前本阶段和操作系统无关,Linux或Windows或其它系统在这阶段的顺序是一样的内核加载中-->内核启动完成内核加载后-->系统环境初始化完成终端加载、用户登录......
  • 研发流程
    研发流程不只是一个流程 以人治天下,贤则大治,不贤则大乱。以术知天下,术高多宵小。以法治天下,法令莫不从,民生定。一、总要有个流程作为一个研发,你最讨厌什么?"小功能,十分钟能搞定吧!""需求都清楚了吧,明天老板要看效果!""有个急事,插一下!""这个地方,还要调整下,稍后给你更新......
  • RocketMQ源码(六):RocketMQ消费者启动流程
    RocketMQ通过Consumer消费消息,可并发和顺序的处理消息,这里以并发消费普通消息为例,分析消息下佛诶的整体流程。Consumer的示例代码如下:1importcom.snails.rmq.common.RMQConstant;2importorg.apache.rocketmq.client.consumer.DefaultMQPushConsumer;3importorg.a......
  • IIS报错:HTTP 错误 404.2 - Not Found 由于Web服务器上的”ISAPI和CGI限制”列表设置,无
     解决方法:  ......
  • 跨域 - laravel
    1、在app\Http\Middleware下创建CrossHttp.php配置文件;(添加允许跨域的域名)<?phpnamespaceApp\Http\Middleware;useClosure;classCrossHttp{/***Handleanincomingrequest.**@param\Illuminate\Http\Request$request*@param\Cl......
  • HTTP响应头信息和请求头信息详解
    web性能测试中有一个web资源分析,web资源是从服务器入手对web服务器的性能进行分析。所以了解一下以下信息是很有必要的哦。一:响应头信息HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响......
  • 后端发送Post请求
    publicstaticstringDoPostByADK(stringurl,stringjsonData,stringtoken){//发送Post请求try{ServicePointManager.ServerCertificateValidationCallback=newSystem.Net.Security.RemoteCertificateValidationCallback(Ch......
  • 2022完整iOS APP发布App Store上架流程指南
    如果你是新手,将在这里清晰发布到AppStore整个上架流程,还有相应的流程解决方案。如果你上架过iOSAPP,这里会了解到有更快捷的上架过程。上架iOS最基本需要一个付费的开发者账号,还没有的话申请一个或者借用。通常也还需要一台Mac电脑,不过这里介绍到不用Mac在Windows系统中直接发......
  • 苹果app开发流程详解
    苹果app开发流程详解 苹果AppStore上传应用流程详解,在向AppStore提交应用之前,开发者首先要成为苹果iOS开发者项目的成员,每年向苹果缴纳99美元或199美元的费用(具体申请方法后期更新)。免688开发IOS应用,根据apple的规定,不支付688,可以开发IOS应用,但是不支持提交审核,推送,支付和apple登......