laravel架构 —— 一次请求的生命周期

2、生命周期概览
2.1 第一件事

Laravel应用的所有请求入口都是public/index.php文件,所有请求都会被web服务器(Apache/Nginx)导向这个文件。index.php文件包含的代码并不多,但是,这里是加载框架其它部分的起点。

index.php文件载入Composer生成的自动加载设置,然后从bootstrap/app.php脚本获取Laravel应用实例,Laravel的第一个动作就是创建服务容器实例。

2.2 HTTP/Console 内核

接下来,请求被发送到HTTP内核或Console内核,这取决于进入应用的请求类型。这两个内核是所有请求都要经过的中央处理器,现在,就让我们聚焦在位于app/Http/Kernel.php的HTTP内核。

HTTP内核继承自Illuminate\Foundation\Http\Kernel类,该类定义了一个bootstrappers数组,这个数组中的类在请求被执行前运行,这些bootstrappers配置了错误处理、日志、检测应用环境以及其它在请求被处理前需要执行的任务。

HTTP内核还定义了一系列所有请求在处理前需要经过的HTTP中间件,这些中间件处理HTTP会话的读写、判断应用是否处于维护模式、验证CSRF令牌等等。

HTTP内核的标志性方法handle处理的逻辑相当简单:获取一个Request,返回一个Response,把该内核想象作一个代表整个应用的大黑盒子,输入HTTP请求,返回HTTP响应。

2.2.1 服务提供者

内核启动过程中最重要的动作之一就是为应用载入服务提供者,应用的所有服务提供者都被配置在config/app.php配置文件的providers数组中。首先,所有提供者的register方法被调用,然后,所有提供者被注册之后,boot方法被调用。

服务提供者负责启动框架的所有各种各样的组件,比如数据库、队列、验证器,以及路由组件等,正是因为他们启动并配置了框架提供的所有特性,服务提供者是整个Laravel启动过程中最重要的部分。

2.2.2 分发请求

一旦应用被启动并且所有的服务提供者被注册,Request将会被交给路由器进行分发,路由器将会分发请求到路由或控制器,同时运行所有路由指定的中间件。

3、聚焦服务提供者
服务提供者是启动Laravel应用中最关键的部分,应用实例被创建后,服务提供者被注册,请求被交给启动后的应用进行处理,整个过程就是这么简单!

对Laravel应用如何通过服务提供者构建和启动有一个牢固的掌握非常有价值,当然,应用默认的服务提供者存放在app/Providers目录下。

默认情况下,AppServiceProvider是空的,这里是添加自定义启动和服务容器绑定的最佳位置,当然,对大型应用,你可能希望创建多个服务提供者,每一个都有着更加细粒度的启动。

HTTPROOT | 自学PHP | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 石头哥 |微信小程序 |木讯 |备案
Copyright © 1998 - 2016 HTTPROOT.COM. All Rights Reserved httproot.com 版权所有