当前位置: 首页 > 后端技术 > PHP

LaravelRequestLifeCycle

时间:2023-03-29 16:01:16 PHP

本文为译文,LaravelRequestLifeCycle原创,译文LaravelRequestLifeCycle首发于个人博客,转载请注明出处。使用框架、工具或服务时,请在使用前研究其工作原理。随着原理研究工作的不断深入,会让我们在使用的时候更加得心应手。本文旨在帮助大家掌握《LaravelHTTP请求生命周期》的工作原理。内容涵盖何时向Laravel服务发送HTTP请求,在项目运行的各个阶段如何处理请求,以及框架如何将处理结果返回给用户。我们将带领您一步步揭开其中的秘密。自动加载的第一步,当用户在浏览器中访问该URL时,会发起一个HTTP请求,最后这个请求会发送到我们的Web服务器。Web服务器(Apache或Nginx)通过匹配的服务配置,然后向Laravel中的入口文件public/index.php发送请求,完成项目依赖服务的加载功能。首先将composer生成的autoloader导入到工程中(译注:require__DIR__.'/../vendor/autoload.php';)。然后接收由bootstrap/app.php文件创建的应用程序实例。创建实例的过程就是项目初始化的过程。内核下一步:我们将焦点锁定在应用程序实例的内核部分。应用实例根据HTTP请求的运行环境决定将请求发送给HTTP内核还是Console内核。这两个核心是所有HTTP请求的枢纽。HTTP内核是定义在app/Http/Kernel.php文件中的Kernel实现类。它接收请求并返回响应。就这么简单。但是Kernel类内部定义了很多bootstrapper,会完成错误句柄(handle)配置、日志配置、运行环境识别等所有在请求执行前需要完成的配置工作。不仅如此,Kernel类还定义了很多在处理请求之前需要执行的中间件。服务提供者接下来,内核在引导项目启动时加载服务提供者。应用实例所依赖的服务提供者可以在config/app.php配置文件的providers节点中找到。当调用服务提供者的register()方法时,服务提供者将注册到应用程序实例。所有服务提供者注册到应用实例后,应用实例执行boot方法启动项目。当应用实例完成引导、注册服务器提供者并开始处理时,分发请求将由路由器(Router)转发。路由器将请求转发给注册的路由和对应的控制器(译注:定义在routes/web.php或routes/api.php文件中的路由),并执行当前路由相关的中间件。路由器现在处于处理和呈现请求的阶段:路由器将HTTP请求定向到控制器或通过省略控制器直接返回视图或响应。这些路由将放在??app/routes.php中。路由器将HTTP请求发送到匹配的控制器或视图。我们可以在routes/web.php中定义路由,项目的所有controller都管理在app/Https/Controllers(译注:原app/controllers)目录下,一个controller对应一个operation,向它的view发送数据。视图文件定义在resources/views目录下,其作用是输出数据和响应HTTP请求。下面的执行流程图详细描述了上述步骤的执行过程:一个HTTP请求实例1用户在浏览器中输入http://xyz.com,点击回车2用户点击回车后,浏览器通过网络向Web服务器发送页面请求3Web服务器接收到请求并解析请求信息,在Web服务器的配置文件中配置了当前项目根目录路径,由于当前访问的URL地址不包含子路径,因此Web服务器会寻找配置的index.php文件4.web服务器向项目文件的public/index.php发送请求。5PHP解释器收到请求后,解释并执行index.php文件中的PHP代码。此时,由Composer包管理器生成的自动加载文件被加载。6之后,实例化Laravel应用实例,同时安装laravel组件。7HTTP或Console核心接收HTTP请求,加载Laravel服务提供者,分发请求到路由器执行。8路由器将渲染视图文件并生成响应数据给网络服务器。9Web服务器接收PHP的输出并将结果返回给用户的浏览器。10用户浏览器收到服务器响应,渲染页面呈现给用户。总结通过了解Laravel请求生命周期,你不仅可以增加开发Laravel项目的信心。也有助于调试项目、定位和解决错误。在某些情况下可以加速的更普遍的问题。原文:Laravel的请求生命周期