php botstrap 执行过程,Lararel 框架执行流程详解

[项目名]/public/index.php

$app = require_once __DIR__.'/../bootstrap/app.php';

//获得Http内核Kernel的示例;构造HttpKernel

$kernel = $app->make(Kernel::class);

//处理请求和响应;发送响应信息

$response = tap($kernel->handle(

$request = Request::capture()

))->send();

//结束所有中间件以及可终止程序;完成

$kernel->terminate($request, $response);

[项目名]/bootstrap/app.php

$app = new Illuminate\Foundation\Application(

$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)

);

//设置接口类的实现类,并使用单例模式实例化实现类。

//注册HttpKernel

$app->singleton(

Illuminate\Contracts\Http\Kernel::class,

App\Http\Kernel::class

);

//注册ConsoleKernel

$app->singleton(

Illuminate\Contracts\Console\Kernel::class,

App\Console\Kernel::class

);

//异常处理

$app->singleton(

Illuminate\Contracts\Debug\ExceptionHandler::class,

App\Exceptions\Handler::class

);

return $app;

[项目名]/Http/Kernel.php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel

{

protected $middleware = [

\App\Http\Middleware\TrustProxies::class,

\Fruitcake\Cors\HandleCors::class,

\App\Http\Middleware\PreventRequestsDuringMaintenance::class,

\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,

\App\Http\Middleware\TrimStrings::class,

\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,

\Illuminate\Session\Middleware\StartSession::class,

];

protected $middlewareGroups = [

'web' => [

\App\Http\Middleware\EncryptCookies::class,

\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,

\Illuminate\Session\Middleware\StartSession::class,

\Illuminate\View\Middleware\ShareErrorsFromSession::class,

\App\Http\Middleware\VerifyCsrfToken::class,

\Illuminate\Routing\Middleware\SubstituteBindings::class,

\App\Http\Middleware\Language::class, //语言包中间件注册。

],

'api' => [

'throttle:api',

\Illuminate\Routing\Middleware\SubstituteBindings::class,

],

];

protected $routeMiddleware = [

'auth' => \App\Http\Middleware\Authenticate::class,

'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,

'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,

'can' => \Illuminate\Auth\Middleware\Authorize::class,

'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,

'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,

'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,

'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,

'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

];

}

入口页,public/index.php;引入了 bootstrap 目录下的 app.php,通过 make 方法实例出一个 kernel 对象,Kernel 类是在 Illuminate\Contracts\Http\Kernel ,打印出 Kernel 对象,发现有很多 protected 的属性,简单罗列一下:

* middleware

* middlewareGroups

* routeMiddleware

* app

* router

* bootstrappers

* middlewarePriority

重点看 app 属性,app 属性实际上是一个 Illuminate\Foundation\Application 的实例,里面又包含很多属性值,主要的属性有:

* loadedProviders

* bindings

* instances

* aliases

接着调用了 kernel 类的 handle 方法,传入一个 request 请求,request 请求继承了 SymfonyRequest,并调用了一个 capture 方法,并将返回的值返回给 response 变量。整个流程基本到此为止。

,难道就这么简单,当然不是,请求进来之后,kernel 类做了一系列的验证,分发,处理,包括表单验证,中间件,日志记录,调用控制器,查询数据等等.... 如果能把这中间的整个流程全部搞清楚,并理解为什么这么做,那么你就可以算个咖了,起码是个中咖!

$response = tap($kernel->handle(

$request = Request::capture()

))->send();

$kernel->terminate($request, $response);

/bootstrap/app.php

// 创建容器$app;参数为应用程序根目录

$app = new Illuminate\Foundation\Application(

$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)

);

该类是框架核心类,负责启动框架,以及调动其他类提供的功能。

该类继承了Illuminate\Container\Container类,可见该类也是个容器。是整个框架最大的容器;

执行流程

1加载框架类库,创建容器,接收request请求。

2以管道的设计模式 执行部分中间件

3路由解析调度

4实例化当前控制器

5执行web中间件

6执行控制器中间件

7执行控制器操作

8返回response

9接收框架

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值