2

1. 预备知识

1.1 composer 基本用法

1.1.1 参考文章

composer 基本用法

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\Requestcapture 方法,返回 Illuminate\Http\Request 实例
  • 调用 handle 方法,传入 Request 实例,并返回响应(Illuminate\Http\response

    • 启用 _method 请求参数来确定预期的 HTTP 方法
    • 注册 request 单例
    • 清除已注册的 request 实例
    • 启动包装器(即:载入配置文件中定义的数据)

      1. 载入环境变量
      2. 载入配置文件
      3. 异常处理
      4. 注册 Facades
      5. 注册服务提供者
      6. 启动服务提供者
    • middleware,核心中间件
    • middlewareGroups,对应类型(webapi)的中间件组
    • routeMiddleware可选路由中间件(由用户决定是否启用,和注入的模型的启动顺序由用户自由调控)
    • 可选,实例化 模型
    • 可选:实例化表单验证类,进行验证
    • 控制器
    • 返回视图
  • 调用 responsesend 方法

    • 自定义 response header
    • 结束客户端请求,输出响应(详情查看:fastcgi_finish_request 函数)。其后的输出将丢失(除非写进日志)
  • 调用 App\Http\Kernelterminate 方法,执行程序结束时的回调

灰色v碰触
2.9k 声望42 粉丝

爱技术,爱生活