Laravel 请求生命周期--简化版 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区

[Laravel 请求生命周期--简化版 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区]

核心概念

  • 单一入口
  • 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方法做相关清理的操作

Original url: Access

Created at: 2018-10-10 15:10:45

Category: default

Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论