俗话说知己知彼百战不怠,使用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属性数组中。