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);

Laravel 5.x 启动过程分析 [转]的更多相关文章

  1. Laravel 5.x 启动过程分析

     Posted on 2015年9月11日 by  学院君 1.初始化Application 1.1 注册基本绑定 app -> Application实例(Illuminate\Foundat ...

  2. ASP.Net Core MVC6 RC2 启动过程分析[偏源码分析]

    入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢? .NET Web Development and Tools Blog ASP.NE ...

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

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

  4. Neutron分析(2)——neutron-server启动过程分析

    neutron-server启动过程分析 1. /etc/init.d/neutron-server DAEMON=/usr/bin/neutron-server DAEMON_ARGS=" ...

  5. linux视频学习7(ssh, linux启动过程分析,加解压缩,java网络编程)

    回顾数据库mysql的备份和恢复: show databases; user spdb1; show tables; 在mysql/bin目录下 执行备份: ./mysqldump -u root - ...

  6. Activity启动过程分析

    Android的四大组件中除了BroadCastReceiver以外,其他三种组件都必须在AndroidManifest中注册,对于BroadCastReceiver来说,它既可以在AndroidMa ...

  7. Spark Streaming应用启动过程分析

    本文为SparkStreaming源码剖析的第三篇,主要分析SparkStreaming启动过程. 在调用StreamingContext.start方法后,进入JobScheduler.start方 ...

  8. ActivityManagerService启动过程分析

    之前讲Android的View的绘制原理和流程的时候,讲到过在Android调用setContentView之后,Android调用了一个prepreTravle的方法,这里面就提到了Activity ...

  9. Disconf源码分析之启动过程分析下(2)

    接上文,下面是第二次扫描的XML配置. <bean id="disconfMgrBean2" class="com.baidu.disconf.client.Dis ...

随机推荐

  1. 高可用Hadoop平台-Flume NG实战图解篇

    1.概述 今天补充一篇关于Flume的博客,前面在讲解高可用的Hadoop平台的时候遗漏了这篇,本篇博客为大家讲述以下内容: Flume NG简述 单点Flume NG搭建.运行 高可用Flume N ...

  2. [MAC]OS X Mavericks 10.9.5 / 10.10.2 VMWare vmdk镜像,解压就能用!

    用起来是比VirtualBox好使很多: 1.鼠标很灵敏,不像Vbox那么飘 2.显卡有驱动,VM可以配置显示器尺寸,完美支持网络.语音.视频,直接搞全屏,还能看电影 3.USB设备支持热插拔 4.支 ...

  3. mxnet安装

    本来不想写这些玩意,但是老是纠缠安装环境,索性自己记一下. 我是在别人的基础上增加的,所以比较全. 裸机开始安装: 1.基本依赖的安装 sudo apt-get update sudo apt-get ...

  4. php 文件锁

    当写为LOCK_EX锁 且 读为LOCK_SH锁时最为妥当,经测试,这时情况如下: 1, 先运行w.php,马上支行r.php 后 程序会先等写入后再读取 2, 先运行r.php,再马上支行w.php ...

  5. 8.15 CSS知识点6

    自定义动画 1.animation-name(动画名称) 元素所应用的动画名称,必须与规则@keyframes配合使用,因为动画名称由@keyframes定义. 语法: animation-name ...

  6. flexbox 的相关属性的运用

    若是用 JS 动态的添加 html 元素到有 flexbox 属性的元素上,那么渲染的时候 可能会有问题. CSS 代码如下: .display-flex { /* OLD: Safari, iOS, ...

  7. SecureCRT的安装

    SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件. SecureCRT 是高度可定制的终端仿真器,适用于 In ...

  8. Linux系统yum命令安装软件时保留(下载)rpm包 -- 转载

    昨天在部署zabbix监控的时候,遇到一个问题:监控服务器处于无外网状态,在线安装不可用.而某些依赖包度娘或谷姐搜索起来也挺呛人的!于是想到一个办法,利用有外网的服务器的yum命令来安装这些软件,并自 ...

  9. Error:(1, 1) error: illegal character: \65279解决方法

    NotePad++,选择格式,选择转为UTF-8无BOM格式,即可解决,感谢http://tzwzero-163-com.iteye.com/blog/1696605

  10. NPOI Helper文档

    public class ExcelHelper { /// <summary> /// NPOI Excel转DataTable /// </summary> /// < ...