Laravel 请求生命周期--简化版
核心概念
- 单一入口
- Application
- Kernel
- Request
- Response
单一入口
先来看laravel程序的nginx配置文件,nginx首先判断请求的文件是否存在,如果不存在就交给index.php
去处理。index.php
就是laravel程序的唯一入口。
root ${laravel_path}/public; # laravel根目录设置
location / {
index index.php;
try_files $uri $uri/ /index.php?$query_string;
}
Application
Application是一个服务器容器对象,它负责管理类依赖关系并执行依赖注入(DI)。
由此可见,它有两个主要的功能:1. 创建类,2. 构造创建类需要的参数。
Application就如同一个工厂的车间,你只需要把原材料放进去,它会自动生成出成品。
基本使用方法
class Car{
function __toString()
{
return 'Car'.mt_rand(1,100);
}
}
$app = new \Illuminate\Foundation\Application();//容器
$app->bind('car',Car::class);// 加入原材料(规则)
foreach (range(1, 10) as $k) {
echo $app->make('car') . "\r\n";//生产成品
}
Kernel
接收请求到响应请求的整个过程都是由Kernel负责。
Request
所有的请求相关的信息都包含在Request
对象里面。换句话说要获取请求的任何信息都应该从这个对象里面获取。
Response
所有的返回给客户端的数据都被包装成为了一个Response
对象。
生命周期
- nginx把http请求转发给
public/index.php
- 创建Application对象
- 往
Application
里面注册App\Http\Kernel::class
对象(Kernel) - 使用
Application
创建Kernel
对象 - 创建
Request
对象 - 调用
Kernel
的handle
方法处理Request
请求,并返回Response
对象 - 使用
Response
的send
方法输出结果 - 调用
Kernel
的terminate
方法做相关清理的操作
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer
于 7年前 加精
bootstrap, service provider, pipeline
是不是也要描述一下呢?
@jl9404 这篇文章只是简单的介绍了整个生命周期的核心概念,我本意是希望文章阅读时间控制在10分钟内。你说的那些概念我会在今后的文章中介绍。
簡單明瞭^^
很符合你的签名:长话短说,哈哈哈。但是这种东西,太短可能说不清楚
@MrJing 能揭其本质就好
@dongyuhappy 感觉写的很精简,也很好理解,看了后有了大概的印象,谢谢。