Laravel 5.x 启动过程分析 [转]
1、初始化Application
1.1 注册基本绑定
- app -> Application实例(Illuminate\Foundation\Application)
- Illuminate\Container\Container -> Application实例(Illuminate\Foundation\Application)
1.2 注册基本服务提供者并启动
EventServieProvider —— 事件服务提供者
$this->app->singleton('events', function ($app) {return (new Dispatcher($app))->setQueueResolver(function () use ($app) {return $app->make('Illuminate\Contracts\Queue\Factory');}); });
RoutingServiceProvider —— 路由服务提供者
public function register() {$this->registerRouter();$this->registerUrlGenerator();$this->registerRedirector();$this->registerPsrRequest();$this->registerPsrResponse();$this->registerResponseFactory(); }
更多详情查看源码:Illuminate\Routing\RoutingServiceProvider.php
1.3 注册核心服务容器别名
更多详情查看源码:Illuminate\Foundation\Application.php
第1026行registerCoreContainerAliases
方法。
1.4 设置根路径(如果传入的话)
if ($basePath) {$this->setBasePath($basePath); }
更多详情查看源码:Illuminate\Foundation\Application.php
第262行setBasePath
方法。
2、注册共享的Kernel和异常处理器
- Illuminate\Contracts\Http\Kernel -> App\Http\Kernel
- Illuminate\Contracts\Console\Kernel -> App\Console\Kernel
- Illuminate\Contracts\Debug\ExceptionHandler -> App\Exceptions\Handler
3、处理请求和响应
3.1 web请求
解析Illuminate\Contracts\Http\Kernel,实例化App\Http\Kernel
a.构造函数:设置$app/$router,初始化$router中middleware数值
b.handle处理请求 —— 经过路由发送请求:
- $request是经过Symfony封装的请求对象
- 注册request实例到容器 ($app[‘request’]->Illuminate\Http\Request)
- 清空之前容器中的request实例
- 调用
bootstrap
方法,启动一系列启动类的bootstrap方法:- Illuminate\Foundation\Bootstrap\DetectEnvironment 环境配置($app[‘env’])
- Illuminate\Foundation\Bootstrap\LoadConfiguration 基本配置($app[‘config’])
- Illuminate\Foundation\Bootstrap\ConfigureLogging 日志文件($app[‘log’])
- Illuminate\Foundation\Bootstrap\HandleExceptions 错误&异常处理
- Illuminate\Foundation\Bootstrap\RegisterFacades 清除已解析的Facade并重新启动,注册config文件中alias定义的所有Facade类到容器
- Illuminate\Foundation\Bootstrap\RegisterProviders 注册config中providers定义的所有Providers类到容器
- Illuminate\Foundation\Bootstrap\BootProviders 调用所有已注册Providers的boot方法
- 通过
Pipeline
发送请求,经过中间件,再由路由转发,最终返回响应new Pipeline($this->app))->send($request)->through($this->middleware)->then($this->dispatchToRouter()
c.将响应信息发送到浏览器:
$response->send();
d.处理继承自TerminableMiddleware
接口的中间件(Session)并结束应用生命周期:
$kernel->terminate($request, $response);
转载于:https://www.cnblogs.com/Felixdh/p/5691907.html
Laravel 5.x 启动过程分析 [转]相关推荐
- 嵌入式linux启动过程分析,嵌入式Linux裸机开发(二)——S5PV210启动过程分析
嵌入式Linux裸机开发(二)--S5PV210启动过程分析 一.iROM启动方式简介 友善之臂Smart210开发板的SoC为三星S5PV210,S5PV210采用iROM启动方式进行启动,通过查阅 ...
- OpenWrt启动过程分析+添加自启动脚本【转】
一.OpenWrt启动过程分析 转自: http://www.eehello.com/?post=107 总结一下OpenWrt的启动流程:1.CFE->2.linux->3./etc/p ...
- pixhawk PX4FMU和PX4IO最底层启动过程分析
摘要: pixhawk PX4FMU和PX4IO最底层启动过程分析1.1 主处理器和协处理器的固件烧写和运行流程首先,大体了解PX4IO 与PX4FMU各自的任务.PX4IO(STM32F100)为P ...
- linux 重定位arm,Arm linxu启动过程分析(一)
本文着重分析 FS2410 平台 linux-2.6.14 内核启动的详细过程,主要包括: zImage 解压缩阶段. vmlinux 启动汇编阶段. startkernel 到创建第一个进程阶段三个 ...
- linxu 启动过程分析
linxu 启动过程分析 Linux启动过程如下:当用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备(通常是硬盘)启动,接着启动设备上安装的引导程序lilo或grub开始引导Linux ...
- 开机SystemServer到ActivityManagerService启动过程分析
开机SystemServer到ActivityManagerService启动过程 一 从Systemserver到AMS zygote-> systemserver:java入层口: /*** ...
- AliOS Things的启动过程分析(一)
AliOS Things的启动过程分析(一) 在本篇文章中,我们以developerkit开发板为例,介绍AliOS Things的启动过程.AliOS Things支持多种工具链进行编译链接的方式生 ...
- Chromium的GPU进程启动过程分析
Chromium除了有Browser进程和Render进程,还有GPU进程.GPU进程负责Chromium的GPU操作,例如Render进程通过GPU进程离屏渲染网页,Browser进程也是通过GPU ...
- Android开发入门教程2-Android init 启动过程分析
Android init 启动过程分析 分析android的启动过程,从内核之上,我们首先应该从文件系统的init开始,因为 init 是内核进入文件系统后第一个运行的程序,通常我们可以在linu ...
最新文章
- Orchard 的项目结构-解决方案文件夹的原理与使用
- 用jOOQ用Java编写SQL
- python在路径里添加变量_想学Python?那就先从头开始吧!
- 同步监视器之同步代码块、同步方法
- C++新特性探究(二):override、final
- SDN第5次上机作业
- 向模块化进军,创建类
- 大数据学长面试之华为面试题
- HTML四季变换图,四季星空图
- 计算机视觉注意力机制-Attention
- 新媒体营销方式的优势
- 修嗒嗒“全民家装狂欢节”诞生,巨额补贴能否造就家装行业的“双十二”?
- C#使用ffmpeg抽帧压缩mp4
- Java P2298 Mzc和男家丁的游戏
- 【无标题】Map的使用方式
- 模拟高校的三个老师同时分发80份学习笔记
- 数字音频编辑软件GoldWave破解版百度云下载
- 【编程之外】从《海贼王》的视角走进BAT的世界
- C++ 单引号和双引号区别
- 学习笔记3-数学基础
热门文章
- 文档权限服务器上,服务器上的权限
- 怎么看linux的命令说明,在linux下,怎么用命令来查看版本?
- 安卓beforetextchanged_【已解决】Android中给EditText添加的TextWatcher中的onTextChanged始终被调用(被执行多次)...
- centos8 Failed to download metadata for repo ‘base‘: Cannot download repomd.xml
- Navicat 解决方案之ORA-28547
- 快速了解什么是RSA加密算法
- Nginx配置共用80端口|端口转发端口映射
- 把变量赋值给寄存器_阻塞赋值和非阻塞赋值的区别与记忆
- 1008 数组元素右移k位
- Python入门--字符串内容对齐操作center,ljust,rjust,zfill