Laravel请求到响应的整个执行过程,主要可以归纳为四个阶段,即程序启动准备阶段、请求实例化阶段、请求处理阶段、响应发送和程序终止阶段。

程序启动准备阶段

  • 服务容器实例化

服务容器的实例化和基本注册,包括了服务容器本身注册、基础服务提供者注册、核心类别名注册和应用的基本路径注册。注册的服务只是具体的类名,是通过反射机制来实例化对象,并且通过反射机制自动解决构造函数中的依赖关系。

  • 核心类实例化

核心类实例化是服务容器实例化后,通过核心类别名注册服务来得到的服务容器自动实例化对象。如:index.php中的Kernel类实例化:


$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

请求实例化阶段

请求是客户端发送的一个请求报文,包括请求行、请求首部和请求实体。Laravel将其分类并保存在Illuminate\Http\Request类的实例对象中,也就是说将请求转化为一个实例对象。请求实例的创建是通过Illuminate\Http\Request类的capture()静态方法完成的,即:


$request = Illuminate\Http\Request::capture();

但在capture()方法中,可以看出Laravel的请求实例是在Symfony请求实例的基础上创建的。而Symfony是通过PHP的全局数组$_GET、$_POST、$_COOKIE、$_FILE和$_SERVER作为参数来实例化请求的。

请求处理阶段

请求处理阶段首先是准备请求处理的环境,包括环境加载、服务提供者注册等环节,然后将请求实例通过中间件处理及通过路由和控制器的分发控制,使得不同的请求通过相应的处理程序进行处理并生成响应的过程。

响应发送和程序终止阶段

  • 响应发送

Laravel的响应处理类是Illuminate\Http\Response类,该类的底层也是在Symfony的Response类。响应的发送包括两部分内容:响应头信息的发送和响应主体内容的发送。

  • 程序终止

Laravel中,终止程序主要是完成终止中间件的调用。

原文地址:https://segmentfault.com/a/1190000015838318

最新文章

  1. Android中AIDL的理解与使用(二)——跨应用绑定Service并通信
  2. innerHeight,clientHeight,offsetHeight,scrollWidth等的区别和用法
  3. Android学习笔记(二十二)——短信接收与发送
  4. javascript平时小例子⑥(简易计算器的制作)
  5. sql 里 text类型的操作(转载)
  6. 使用O_APPEND标志打开文件对文件进行lseek后进行读写的问题
  7. imageview圆角的实现
  8. Spring for Apache Kafka
  9. C# 判断两个日期是否是同一天
  10. Cocos2d-x 3.1.1开发环境
  11. Chrome 报 Resource interpreted as Script but transferred with MIME type text/plain 警告的解决办法
  12. samba服务搭建
  13. Lodop打印控件传入css样式、看是否传入正确样式
  14. Python 进度条原理
  15. [Spark][kafka]kafka 的topic 创建和删除试验
  16. com.android.jack.CommandLine: Internal compiler error
  17. codeforces 1051 D. Bicolorings (DP)
  18. nopcommerce
  19. linux中DHCP服务配置文件/etc/dhcpd.conf详细说明
  20. linux主机上,UnixBench性能测试工具使用

热门文章

  1. hdoj--1716--排列2(暴力水题)
  2. JeePlus:目录
  3. vue-easytable
  4. bzoj 1755: [Usaco2005 qua]Bank Interest【模拟】
  5. 设计模式 | 组合模式(composite)
  6. [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
  7. Android 性能优化(1)性能工具之「 lint 」 :Improving Your Code with lint:优化代码
  8. 用 NPOI 组件实现数据导出
  9. 26 c#类的组合
  10. 用Martini、websocket实现单机版聊天室