目录
laravel的文件目录如下图。
其中public文件夹下的index.php 是我们项目的入口文件,我们就从这个文件开始研究。
入口文件
index.php里面的代码并不多。
composer自动加载需要的类:
require __DIR__.'/../bootstrap/autoload.php';
这里引入了bootstrap文件夹下的app.php:
$app = require_once __DIR__.'/../bootstrap/app.php';
app.php
我们继续看app.php
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
这里实例化了一个Application类,从官方手册我们知道这是laravel的一个应用实例,我们找到这个类的构造函数:
public function __construct($basePath = null)
{
$this->registerBaseBindings();
$this->registerBaseServiceProviders();
$this->registerCoreContainerAliases();
if ($basePath) {
$this->setBasePath($basePath);
}
}
Application通过构造函数注册了基础绑定,服务提供者等。
服务提供者负责启动框架的所有各种各样的组件,比如数据库、队列、验证器,以及路由组件等,正是因为他们启动并配置了框架提供的所有特性,服务提供者是整个 Laravel 启动过程中最重要的部分。
服务提供者
服务提供者是启动 Laravel 应用中最关键的部分,应用实例被创建后,服务提供者被注册,请求被交给启动后的应用进行处理,整个过程就是这么简单!
对 Laravel 应用如何通过服务提供者构建和启动有一个牢固的掌握非常有价值,当然,应用默认的服务提供者存放在 app/Providers 目录下。
默认情况下,AppServiceProvider 是空的,这里是添加自定义启动和服务容器绑定的最佳位置,当然,对大型应用,你可能希望创建多个服务提供者,每一个都有着更加细粒度的启动。