laravel框架加载流程

在这里插入图片描述
public/index.php

此文件会加载由 Composer 生成的自动加载器定义
并获取由 bootstrap/app.php 文件中所生成的 Laravel 应用程序实例

bootstrap/app.php

生成Laravel应用程序实例 $app
并且绑定核心 AppHttpKernel::class 或 AppConsoleKernel::class
这取决于请求类型 在这里请求经过一些列操作 最终返回浏览器

app/Http/Kernel.php

一般情况是 HTTP 请求,所以主要说些这个
这个类继承自 IlluminateFoundationHttpKernel 它定义了一个 bootstrappers 数组,在请求被运行前会先行运作。这些启动器设置了错误处理、日志记录、侦测应用程序环境,并运行其它需要在请求实际处理前就该被完成掉的工作。
其实这个过程就是 启动框架的服务提供者 -> IlluminateFoundationBootstrapBootProviders 这个继承自 IlluminateContractsFoundationApplication 但是实现却是一开始的 IlluminateFoundationApplication 也就是创建框架实例那个文件里 有这个方法 (有点搞不懂 继承自一个接口,接口没有功能,自己也没有功能,而下面实现这个功能的又没有继承他 那如何找到这个功能的呢) 看这里接口说明
app/Http/Kernel.php
HTTP 核心也定义了一份 HTTP 中间件 清单,所有的请求在被应用程序处理之前都必须经过它们。这些中间件处理 HTTP session 的读写、验证 CSRF 令牌、决定应用程序是否处于维护模式,以及其它更多任务作。

router

所有服务提供者加载完毕后,把request请求转移给router路由器
经过router分派给route(路由)或者controller,并运行中间件处理后返回response(响应)

在这里插入图片描述
整个启动流程,主要涉及的几个文件如下
public/index.php,bootstrap/app.php,app/Http/Kernel.php,
除了Kernel另外两个文件去掉注释,基本很简洁

public/index.php

require __DIR__.'/../bootstrap/autoload.php';

//启动框架,生成应用程序
$app = require_once __DIR__.'/../bootstrap/app.php';

//运行应用程序,接收Request请求
$kernel = $app->make(IlluminateContractsHttpKernel::class);

//经过路由器分发到路由,控制器,中间件的处理返回Response
$response = $kernel->handle(
    $request = IlluminateHttpRequest::capture()
);
//发送响应到浏览器
$response->send();
//销毁请求与响应
$kernel->terminate($request, $response);

bootstrap/app.php

//创建应用程序
$app = new IlluminateFoundationApplication(
    realpath(__DIR__.'/../')
);

//重要的接口绑定 (会根据不同请求,做不同响应.所以主要说下Http)
$app->singleton(
    IlluminateContractsHttpKernel::class,
    AppHttpKernel::class
);

$app->singleton(
    IlluminateContractsConsoleKernel::class,
    AppConsoleKernel::class
);

$app->singleton(
    IlluminateContractsDebugExceptionHandler::class,
    AppExceptionsHandler::class
);

//返回应用程序
return $app;

app/Http/Kernel.php

namespace Http;

use IlluminateFoundationHttpKernel as HttpKernel;

//这里需要说明下,Kernel继承自HttpKernel也就是框架基础核心.
//基础核心主要作用就是,加载这里配置的中间件,还有就是启动框架的各种服务
//因为该文件内容较多就不展示了,可以自己稍微看一下
class Kernel extends HttpKernel
{
    //设置了全局中间件
    protected $middleware = [
        IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,
        AppHttpMiddlewareEncryptCookies::class,
        IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
        IlluminateSessionMiddlewareStartSession::class,
        IlluminateViewMiddlewareShareErrorsFromSession::class,
        AppHttpMiddlewareVerifyCsrfToken::class,
    ];

    //设置了路由中间件
    protected $routeMiddleware = [
        'auth' => AppHttpMiddlewareAuthenticate::class,
        'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
        'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
        'test'=> AppHttpMiddlewareTestMiddleware::class,
        'mi'=> AppHttpMiddlewareMiMiddleware::class,
    ];
}

结合图片就大致了解,laravel的启动过程.

通过上面注释文件,估计大多数悟性爆表的同学已经明白整个过程了.还有极少数晕乎少年没有明白.这里再多说几句.

其实整个流程就三部 全部在index.php这个文件里

  • 启动框架

这个是由 app.php做到的 并准备好中间 服务待用

  • 创建http内核

  • 响应请求

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我峰兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值