当 Yii2 框架执行 index.php 入口脚本后,内部执行逻辑和顺序可以概括如下:
1、加载相关配置文件和关键组件:
加载 Composer 自动加载器:
require DIR . ‘/…/vendor/autoload.php’;
加载 Yii 框架文件:
require DIR . ‘/…/vendor/yiisoft/yii2/Yii.php’;
加载应用配置:
$config = require DIR . ‘/…/config/web.php’;
创建应用实例:
(new yii\web\Application($config))->run();
这一行代码非常关键,它实例化了一个 yii\web\Application 对象,并调用其 run() 方法。
2、应用类初始化(构造函数 __construct 和 init 方法):
- 设置应用属性:如 basePath, components, modules, params 等。
- 加载和执行 bootstrap 组件:在 init() 方法中初始化并运行配置文件中的引导组件。
3、处理请求:
- 解析请求:通过解析 URL 来确定路由 (urlManager 组件)。
- 创建请求和响应对象:初始化 Request 和 Response 组件。
- 触发 beforeRequest 事件:允许附加的行为在请求处理之前执行。
- 路由请求:根据解析的路由信息确定要执行的控制器和动作。
4、执行控制器和动作:
- 创建控制器实例:实例化目标控制器,执行相关init等相关初始方法
- 执行前置过滤器:如动作过滤器和行为。
- 调用控制器动作:执行具体的动作方法。
5、生成和发送响应:
- 调用动作结果:如渲染视图、返回数据等。
- 触发 afterRequest 事件:允许附加的行为在请求处理之后执行。
- 发送响应:将生成的响应内容发送给客户端。
6、结束应用:
- 调用 Application::end() 方法:执行清理工作并结束应用生命周期。