俗话说知己知彼百战不怠,使用Laravel也有有一段时间了,中间也踩了很多坑,碰了很多壁,归根结底还是对Laravel的底层不太了解,以前使用Thinkphp养成的MVC的习惯,刚接触Laravel一时还没转变过来,所以最近抱着学习的态度,研究了下Laravel框架的执行流程。
Laravel虽然使用上感觉跟Thinkphp差不多,但是底层的实现方式还有框架的架构,跟Thinkphp差别还是蛮大,不过Tp5貌似吸收了很多Laravel中的特性。
废话到此为止,下面上干货
1. 入口文件index.php
1. 引入bootstrap/autoload.php,自动加载依赖库
2. 引入bootstrap/app.php’
- 创建容器$app
// 参数为应用程序根目录
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
- 该类是框架核心类,负责启动框架,以及调动其他类提供的功能。
- 该类继承了Illuminate\Container\Container类,可见该类也是个容器。是整个框架最大的容器;
- 该类的构造器代码如下:
public function __construct($basePath = null)
{
if ($basePath) {
// 设置应用程序根目录
$this->setBasePath($basePath);
}
// 注册基础绑定服务
// 1. 设置当前类为容器实例
// 2. 设置实例别名为app
$this->registerBaseBindings();
// 注册基础服务提供商
// 1. 注册事件服务提供商
// 2. 注册日志服务提供商
// 3. 注册路由服务提供商
$this->registerBaseServiceProviders();
// 注册核心容器别名
// 为一些核心类设置别名,
// 存储在父类的$aliases和abstractAliases属性数组中。
// $aliases 为 别名 => 类名 键值对

本文详细介绍了Laravel框架的执行流程,从入口文件index.php开始,包括引入autoload.php和app.php,创建容器,执行HTTP内核,中间件处理,路由解析,控制器实例化,到最后返回响应。重点解析了Laravel的中间件执行顺序,尤其是如何解决在控制器构造函数中无法获取session的问题。同时,文章探讨了Laravel中广泛使用的后期静态绑定技术及其在Facades类中的应用。
最低0.47元/天 解锁文章
2565

被折叠的 条评论
为什么被折叠?



