上篇介绍了 Laravel 的路由注册机制“Laravel 4 的路由是如何完成注册的?”作为这个系列的最后一讲,本篇将要为大家介绍的,是执行了 $app->run() 之后所发生的事,以及这个过程中涉及到的应用程序事件。
在完成了路由的注册后,紧接着执行的就是 public/index.php 中的 $app->run(); 让我们来看一下 run 方法的源码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public
function
run()
{
// 调度路由返回响应实例
$response
=
$this
->dispatch(
$this
[
'request'
]);
// 执行 close 应用程序事件
$this
[
'router'
]->callCloseFilter(
$this
[
'request'
],
$response
);
// 发送响应
$response
->send();
// 执行 finish 应用程序事件
$this
[
'router'
]->callFinishFilter(
$this
[
'request'
],
$response
);
}
|
下面是整个流程的分析:
- 第4行,执行了路由调度操作 dispatch
- 执行应用程序事件 App::before(function($request){})
- 执行 Illuminate\Routing\Route.php 的 run 方法
- 执行 Route::filter($route, $request) 前置操作
- 最终业务回调,取得响应实例(这里执行了之前注册进路由的回调函数)
- 执行 Route::filter($route, $request, $response) 后置操作
- 执行应用程序事件 App::after(function($request, $response){})
- 第7行,执行应用程序事件 App::close(function($request, $response){})
- 第10行,发送 1-2-2 中获取的响应实例
- 第13行,执行应用程序事件 App::finish(function($request, $response){})
- 最后在 public/index.php 中的 $app->shutdown() 时,执行最后的应用程序事件 App::shutdown(function($application){})