长生命周期的php框架,laravel请求生命周期

HTTP内核继承自 Illuminate\Foundation\Http\Kernel 类,

通过handle方法去处理请求, /**

* Handle an incoming HTTP request.

*

* @param \Illuminate\Http\Request $request

* @return \Illuminate\Http\Response

*/

public function handle($request)

{

try {

$request->enableHttpMethodParameterOverride();

$response = $this->sendRequestThroughRouter($request);

} catch (Exception $e) {

$this->reportException($e);

$response = $this->renderException($request, $e);

} catch (Throwable $e) {

$this->reportException($e = new FatalThrowableError($e));

$response = $this->renderException($request, $e);

}

$this->app['events']->dispatch(

new Events\RequestHandled($request, $response)

);

return $response;

}

最主要的是 /**

* Send the given request through the middleware / router.

*

* @param \Illuminate\Http\Request $request

* @return \Illuminate\Http\Response

*/

protected function sendRequestThroughRouter($request)

{

$this->app->instance('request', $request);

Facade::clearResolvedInstance('request');

$this->bootstrap();

return (new Pipeline($this->app))

->send($request)

->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)

->then($this->dispatchToRouter());

}

看到bootstrap() /**

* Bootstrap the application for HTTP requests.

*

* @return void

*/

public function bootstrap()

{

if (! $this->app->hasBeenBootstrapped()) {

$this->app->bootstrapWith($this->bootstrappers());

}

}

把$this->bootstrappers()作为传参,传入 bootstrapWith() 方法,这个传参,就是bootstrappers 数组,

protected $bootstrappers = [

\Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,

\Illuminate\Foundation\Bootstrap\LoadConfiguration::class,

\Illuminate\Foundation\Bootstrap\HandleExceptions::class,

\Illuminate\Foundation\Bootstrap\RegisterFacades::class,

\Illuminate\Foundation\Bootstrap\RegisterProviders::class,

\Illuminate\Foundation\Bootstrap\BootProviders::class,

];

这个数组中的类在请求被执行前运行,这些bootstrappers 配置了 环境变量,配置文件、异常处理,注册门店,注册服务提供者,启动服务提供者等其他在请求被处理前需要执行的任务。 /**

* Run the given array of bootstrap classes.

*

* @param string[] $bootstrappers

* @return void

*/

public function bootstrapWith(array $bootstrappers)

{

$this->hasBeenBootstrapped = true;

foreach ($bootstrappers as $bootstrapper) {

$this['events']->dispatch('bootstrapping: '.$bootstrapper, [$this]);

$this->make($bootstrapper)->bootstrap($this);

$this['events']->dispatch('bootstrapped: '.$bootstrapper, [$this]);

}

}

然后 bootstrapWith 对这个数组进行遍历,对每一个 bootstrap 生成示例,调用各自的 bootstrap() 方法。

内核启动过程中最重要的动作之一就是注册门面: config/app.php配置文件的 aliases 数组,以及 PackageManifest 货物清单 aliases;

为应用载入服务提供者:应用的所有服务提供者都被配置在config/app.php配置文件的 providers 数组中。

所有提供者的register方法被调用进行注册,注册之后,boot方法被调用,每个 provider 调用各自的 boot方法,进行启动。

服务提供者负责启动框架的所有各种各样的组件,比如数据库、队列、验证器,以及路由组件等,正是因为他们启动并配置了框架提供的所有特性,所以服务提供者是整个 Laravel 启动过程中最重要的部分。

应用默认的服务提供者存放在app/Providers 目录下。

默认情况下,AppServiceProvider 是空的,这里是添加自定义启动和服务容器绑定的最佳位置,当然,对大型应用,你可能希望创建多个服务提供者,每一个都有着更加细粒度的启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值