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对象
  • 调用Kernelhandle方法处理Request请求,并返回Response对象
  • 使用Responsesend 方法输出结果
  • 调用 Kernelterminate方法做相关清理的操作
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer 于 7年前 加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

bootstrap, service provider, pipeline
是不是也要描述一下呢?

7年前 评论

@jl9404 这篇文章只是简单的介绍了整个生命周期的核心概念,我本意是希望文章阅读时间控制在10分钟内。你说的那些概念我会在今后的文章中介绍。

7年前 评论

簡單明瞭^^

7年前 评论

很符合你的签名:长话短说,哈哈哈。但是这种东西,太短可能说不清楚

7年前 评论

@MrJing 能揭其本质就好

7年前 评论

@dongyuhappy 感觉写的很精简,也很好理解,看了后有了大概的印象,谢谢。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!