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, // 加密权限类
    ];

上一页:
下一页:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注