生命周期
index.php
1.1 检测是否处于维护模式
if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) {
require __DIR__.'/../storage/framework/maintenance.php';
}
1.2 加载composer
自动加载文件
require __DIR__.'/../vendor/autoload.php';
1.3 加载初始化容器
$app = require_once __DIR__.'/../bootstrap/app.php';
1.3.1 初始化__construct()
class Application extends Container implements ApplicationContract, CachesConfiguration, CachesRoutes, HttpKernelInterface
{
public function __construct($basePath = null)
{
if ($basePath) {
$this->setBasePath($basePath);
}
$this->registerBaseBindings();
$this->registerBaseServiceProviders();
$this->registerCoreContainerAliases();
}
}
1.3.1.1 设置项目的根目录路径
public function setBasePath($basePath)
{
$this->basePath = rtrim($basePath, '\/');
$this->bindPathsInContainer();
return $this;
}
protected function bindPathsInContainer()
{
//项目的app path
$this->instance('path', $this->path());
//根目录
$this->instance('path.base', $this->basePath());
//多语言翻译目录
$this->instance('path.lang', $this->langPath());
//config 配置文件路径
$this->instance('path.config', $this->configPath());
//public 目录路径
$this->instance('path.public', $this->publicPath());
//storage 目录路径
$this->instance('path.storage', $this->storagePath());
//数据库迁移文件路径
$this->instance('path.database', $this->databasePath());
//资源文件路径
$this->instance('path.resources', $this->resourcePath());
//bootstrap 文件路径
$this->instance('path.bootstrap', $this->bootstrapPath());
}
1.3.1.2 注册基本绑定到容器
protected function registerBaseBindings()
{
//把当前实例初始给类常量 $instance
static::setInstance($this);
//把当前实例注册到app这个字符串
$this->instance('app', $this);
//把当前实例注册到 Container
$this->instance(Container::class, $this);
//单利注册渲染前端打包渲染文件
$this->singleton(Mix::class);
//单利注册 composer 包相关的类到容器
$this->singleton(PackageManifest::class, function () {
return new PackageManifest(
new Filesystem, $this->basePath(), $this->getCachedPackagesPath()
);
});
}
1.3.1.3 注册基础服务
protected function registerBaseServiceProviders()
{
//注册事件监听
$this