详细的了解 laravel 框架的启动过程,有助于我们在不同的启动阶段进行扩展性的开发
1、入口文件
index.php
导入 composer 自动加载功能 ./bootstrap/autoload.php
2、启动文件
导入 laravel 容器 ./bootstrap/app.php
- 启动容器
- 注册容器自身(registerBaseBindings)
- 注册事件系统和路由系统(registerBaseServiceProviders)
- 注册 laravel 自有类别名(registerCoreContainerAliases)
- 注册 Http 处理器
- 注册 Cli 处理器
- 注册异常处理器
3、Http 处理器
- 启动 Http 处理器:Illuminate\Contracts\Http\Kernel->handle($request)
- 进入 Http 请求处理工作:Illuminate\Contracts\Http\Kernel->sendRequestThroughRouter
- 重新在容器中绑定 request
- 启动并配置 HTTP 相关的服务组件(Illuminate\Foundation\Bootstrap* 中的所有组件)
启动顺序: 1. DetectEnvironment Dotenv 配置 2. LoadConfiguration Config 配置 (/bootstrap/cache/config.php 或者 /config/*) 3. ConfigureLogging 日志系统配置 4. HandleExceptions php报错配置 5. RegisterFacades 注册外观 6. RegisterProviders 注册用户服务提供器 7. BootProviders 启动所有提供器
- 路由管理器 Pipeline :穿过全局中间件 $middlewareRouter->dispatch(Request $request);Router->dispatchToRoute(Request $request);Router->runRouteWithinStack(Route $route, Request $request)
- 匹配到路由 Pipeline :穿过路由中间件 $routeMiddlewareRoute->run(Request $request)Route->runController(Request $request)Controller->method()
- 业务逻辑
- 处理反射
- 用户业务逻辑
- 处理 Response
- 字符串
- 普通 Response
- 跳转 Response
- JsonResponse
- ViewResponse
4、请求返回
- 应答对象发送到浏览器 $response->send();
- 运行可终止中间件(可终止中间件会是新的中间件实例,除非中间件被设置为单例模式)
- 应用终止后处理 Illuminate\Contracts\Http\Kernel->terminate($request, $response)
from : http://laravel.so/tricks/e977de4b9aab434e1fa66cec77f25f19
沒有留言:
張貼留言