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方法:
    1. Illuminate\Foundation\Bootstrap\DetectEnvironment 环境配置($app[‘env’])
    2. Illuminate\Foundation\Bootstrap\LoadConfiguration  基本配置($app[‘config’])
    3. Illuminate\Foundation\Bootstrap\ConfigureLogging   日志文件($app[‘log’])
    4. Illuminate\Foundation\Bootstrap\HandleExceptions   错误&异常处理
    5. Illuminate\Foundation\Bootstrap\RegisterFacades    清除已解析的Facade并重新启动,注册config文件中alias定义的所有Facade类到容器
    6. Illuminate\Foundation\Bootstrap\RegisterProviders  注册config中providers定义的所有Providers类到容器
    7. 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 启动过程分析 [转]相关推荐

  1. 嵌入式linux启动过程分析,嵌入式Linux裸机开发(二)——S5PV210启动过程分析

    嵌入式Linux裸机开发(二)--S5PV210启动过程分析 一.iROM启动方式简介 友善之臂Smart210开发板的SoC为三星S5PV210,S5PV210采用iROM启动方式进行启动,通过查阅 ...

  2. OpenWrt启动过程分析+添加自启动脚本【转】

    一.OpenWrt启动过程分析 转自: http://www.eehello.com/?post=107 总结一下OpenWrt的启动流程:1.CFE->2.linux->3./etc/p ...

  3. pixhawk PX4FMU和PX4IO最底层启动过程分析

    摘要: pixhawk PX4FMU和PX4IO最底层启动过程分析1.1 主处理器和协处理器的固件烧写和运行流程首先,大体了解PX4IO 与PX4FMU各自的任务.PX4IO(STM32F100)为P ...

  4. linux 重定位arm,Arm linxu启动过程分析(一)

    本文着重分析 FS2410 平台 linux-2.6.14 内核启动的详细过程,主要包括: zImage 解压缩阶段. vmlinux 启动汇编阶段. startkernel 到创建第一个进程阶段三个 ...

  5. linxu 启动过程分析

    linxu 启动过程分析 Linux启动过程如下:当用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备(通常是硬盘)启动,接着启动设备上安装的引导程序lilo或grub开始引导Linux ...

  6. 开机SystemServer到ActivityManagerService启动过程分析

    开机SystemServer到ActivityManagerService启动过程 一 从Systemserver到AMS zygote-> systemserver:java入层口: /*** ...

  7. AliOS Things的启动过程分析(一)

    AliOS Things的启动过程分析(一) 在本篇文章中,我们以developerkit开发板为例,介绍AliOS Things的启动过程.AliOS Things支持多种工具链进行编译链接的方式生 ...

  8. Chromium的GPU进程启动过程分析

    Chromium除了有Browser进程和Render进程,还有GPU进程.GPU进程负责Chromium的GPU操作,例如Render进程通过GPU进程离屏渲染网页,Browser进程也是通过GPU ...

  9. Android开发入门教程2-Android init 启动过程分析

    Android init 启动过程分析   分析android的启动过程,从内核之上,我们首先应该从文件系统的init开始,因为 init 是内核进入文件系统后第一个运行的程序,通常我们可以在linu ...

最新文章

  1. Orchard 的项目结构-解决方案文件夹的原理与使用
  2. 用jOOQ用Java编写SQL
  3. python在路径里添加变量_想学Python?那就先从头开始吧!
  4. 同步监视器之同步代码块、同步方法
  5. C++新特性探究(二):override、final
  6. SDN第5次上机作业
  7. 向模块化进军,创建类
  8. 大数据学长面试之华为面试题
  9. HTML四季变换图,四季星空图
  10. 计算机视觉注意力机制-Attention
  11. 新媒体营销方式的优势
  12. 修嗒嗒“全民家装狂欢节”诞生,巨额补贴能否造就家装行业的“双十二”?
  13. C#使用ffmpeg抽帧压缩mp4
  14. Java P2298 Mzc和男家丁的游戏
  15. 【无标题】Map的使用方式
  16. 模拟高校的三个老师同时分发80份学习笔记
  17. 数字音频编辑软件GoldWave破解版百度云下载
  18. 【编程之外】从《海贼王》的视角走进BAT的世界
  19. C++ 单引号和双引号区别
  20. 学习笔记3-数学基础

热门文章

  1. 文档权限服务器上,服务器上的权限
  2. 怎么看linux的命令说明,在linux下,怎么用命令来查看版本?
  3. 安卓beforetextchanged_【已解决】Android中给EditText添加的TextWatcher中的onTextChanged始终被调用(被执行多次)...
  4. centos8 Failed to download metadata for repo ‘base‘: Cannot download repomd.xml
  5. Navicat 解决方案之ORA-28547
  6. 快速了解什么是RSA加密算法
  7. Nginx配置共用80端口|端口转发端口映射
  8. 把变量赋值给寄存器_阻塞赋值和非阻塞赋值的区别与记忆
  9. 1008 数组元素右移k位
  10. Python入门--字符串内容对齐操作center,ljust,rjust,zfill