1. 预备知识
1.1 composer 基本用法
1.1.1 参考文章
1.1.2 要求掌握的知识点
- composer 依赖管理
- composer 自动加载(关键)
1.2 DIP、IOC、DI、IOC 容器
2. Laravel 运行机制剖析
2.1 场景
范例:http://laravel.com/test?name=chenxuelong
2.2 运行机制
2.2.1 前提
以下路径都是相对于 Laravel 根目录而言的.
2.2.1 正文
public/index.php
:
- 注册了
composer
自带的自动加载` 实例化
Illuminate\Foundation\Application
类- 设置了框架路径
- 注册
app
单例(指向Application
) - 注册
Illuminate\Container\Container
单例,指向Applicaion
注册基础服务提供者
- 事件服务提供者(
EventServiceProvider
) - 日志服务提供者(
LogServiceProvider
) - 路由服务提供者(
RoutingServiceProvider
)
- 事件服务提供者(
- 注册核心类的别名
- 注册
App\Http\Kernel
单例 - 注册
App\Console\Kernel
单例 - 注册
App\Exceptions\Handler
单例
获取已注册的
App\Http\Kernel
单例- 设置路由中间件组
- 设置路由中间件
- 调用
Illuminate\Http\Request
的capture
方法,返回Illuminate\Http\Request
实例 调用
handle
方法,传入Request
实例,并返回响应(Illuminate\Http\response
)- 启用
_method
请求参数来确定预期的HTTP
方法 - 注册
request
单例 - 清除已注册的
request
实例 启动包装器(即:载入配置文件中定义的数据)
- 载入环境变量
- 载入配置文件
- 异常处理
- 注册
Facades
- 注册服务提供者
- 启动服务提供者
-
middleware
,核心中间件 -
middlewareGroups
,对应类型(web
或api
)的中间件组 -
routeMiddleware
,可选路由中间件(由用户决定是否启用,和注入的模型的启动顺序由用户自由调控) - 可选,实例化 模型
- 可选:实例化表单验证类,进行验证
- 控制器
- 返回视图
- 启用
调用
response
的send
方法- 自定义
response header
- 结束客户端请求,输出响应(详情查看:
fastcgi_finish_request
函数)。其后的输出将丢失(除非写进日志)
- 自定义
- 调用
App\Http\Kernel
的terminate
方法,执行程序结束时的回调