Illuminate\Foundation\Http\Kernel
handle()
try {
$request->enableHttpMethodParameterOverride();
$response = $this->sendRequestThroughRouter($request);
} catch (Exception $e) {
$this->reportException($e);
$response = $this->renderException($request, $e);
} catch (Throwable $e) {
$e = new FatalThrowableError($e);
$this->reportException($e);
$response = $this->renderException($request, $e);
}
$this->app['events']->fire('kernel.handled', [$request, $response]);
return $response;
核心是这一行$response = $this->sendRequestThroughRouter($request);
,因此我们看下sendRequestThroughRouter()
方法
sendRequestThroughRouter()
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());
}
关键是最后二行:
$this->bootstrap();
最后一行把Request
送进一个新创建的流水线(Pipeline)
, 供各个中间件(Middleware)
处理,然后再派发给路由器(Router)