Laravel请求生命周期
从入口文件/public/index.php可以看出有4个步骤,其中,第3个步骤是最关键的。
1.加载Composer生成的预加载文件。
2.创建Laravel单例应用实例,加载框架配置内容,服务提供者,门面,契约等预设类文件。
3.最关键的步骤,接受请求,对请求进行处理,返回请求处理的结果。
4.完成请求,回调操作内容。
从/public/index.php的源码可以看出:
// 1.加载Composer生成的预加载文件。
require __DIR__.'/../vendor/autoload.php';
// 2.创建Laravel单例应用实例,加载框架配置内容,服务提供者,门面,契约等预设类文件。
$app = require_once __DIR__.'/../bootstrap/app.php';
// 3.最关键的步骤,接受请求,对请求进行处理,返回请求处理的结果。
$kernel = $app->make(Kernel::class);
$response = tap($kernel->handle(
$request = Request::capture()
))->send();
// 4.完成请求,回调操作内容。
$kernel->terminate($request, $response);
从文件\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php,可以看出第3步做的事情有:
3.1.核心文件的Kernel.php,设置了.env 中的配置信息,加载 config 目录中所有配置文件的配置信息,异常处理,注册门面,Service Providers,启动器等设置。
protected $bootstrappers = [
\Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class, // 加载 .env 中的配置信息
\Illuminate\Foundation\Bootstrap\LoadConfiguration::class, // 加载 config 目录中所有配置文件的配置信息
\Illuminate\Foundation\Bootstrap\HandleExceptions::class, // 异常处理
\Illuminate\Foundation\Bootstrap\RegisterFacades::class, // 注册门面
\Illuminate\Foundation\Bootstrap\RegisterProviders::class, // 注册Service Providers
\Illuminate\Foundation\Bootstrap\BootProviders::class, // 注册启动器
];
3.2.有对路由函数的解释,路由中间件的检测等设置。
use Illuminate\Routing\Router;
protected function syncMiddlewareToRouter()
{
$this->router->middlewarePriority = $this->middlewarePriority;
foreach ($this->middlewareGroups as $key => $middleware) {
$this->router->middlewareGroup($key, $middleware);
}
foreach ($this->routeMiddleware as $key => $middleware) {
$this->router->aliasMiddleware($key, $middleware);
}
}
3.3.还有其他不同设置,例如加密,权限等设置。
protected $middlewarePriority = [
\Illuminate\Cookie\Middleware\EncryptCookies::class, // 加载加密类
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class,
\Illuminate\Routing\Middleware\ThrottleRequestsWithRedis::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Illuminate\Auth\Middleware\Authorize::class, // 加密权限类
];
上一页: Laravel 8安装和架构思想下一页: Laravel常用命令行
发表回复