vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php。是laravel处理网络请求的最核心类,在app容器准备好了之后,就会调用本类,之后所有的处理都在此类中。

初始化

1. 调用router,因为router已经中app中注册,所以,直接make就行。

2. 添加middleware,首先添加如下默认的middleware:

$middlewarePriority = [
                \Illuminate\Session\Middleware\StartSession::class,
                \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                \Illuminate\Auth\Middleware\Authenticate::class,
                \Illuminate\Session\Middleware\AuthenticateSession::class,
                \Illuminate\Routing\Middleware\SubstituteBindings::class,
                \Illuminate\Auth\Middleware\Authorize::class,
            ];

3. 添加其他的middlerware,进router,所有middleware以及middlewaregroup都加到router中。

处理request,通过handler函数处理

1. 处理前需要的类初始化,bootstrap

2. 把传入的request送到middleware,然后传递到router。处理结束。

bootstrap,调用app的bootstrapWith初始化整个请求需要的的环境:

    bootarp: 启动的时候需要实例化并运行的类

\Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,
            \Illuminate\Foundation\Bootstrap\LoadConfiguration::class,
            \Illuminate\Foundation\Bootstrap\HandleExceptions::class,
            \Illuminate\Foundation\Bootstrap\RegisterFacades::class,
            \Illuminate\Foundation\Bootstrap\SetRequestForConsole::class,
            \Illuminate\Foundation\Bootstrap\RegisterProviders::class,
            \Illuminate\Foundation\Bootstrap\BootProviders::class,

     LoadEnvironmentVariables
    初始化环境变量文件(根目录下的.env文件),具体加载那几个文件,取决于几个条件:1.环境变量文件夹的路径设置(在app中设置) 2.控制台可以用—env参数,非控制台用APP_ENV环境变量,决定文件的后缀

    设置是通过 vendor/vlucas/phpdotenv/src/Dotenv.php加载到环境变量中:
    $_ENV[$name] = $value;
          $_SERVER[$name] = $value;

  LoadConfiguration.php

    添加config 实例,并且读取config文件夹下的所有文件,初始化对象,注入到容器中,后续就可以直接用config简称调用了。

  HandleExceptions.php

    异常和错误处理,错误都转化成异常,异常调用容器中注册的ExceptionHandler来处理。

注册用的系统函数:
          set_error_handler([$this, 'handleError']);
          set_exception_handler([$this, 'handleException']);

  RegisterFacades.php

把配置文件app里面的app.aliases注册成门面

    注册是通过类:vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php

   这册门面是用php的spl_autoload_register实现的注册自动加载函数,而自动加载函数调用class_alias将别名跟实际类绑定实现。实际类都继承自门面类

    vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php

    门面类的作用,直接调用容器中的绑定,生成相应的类实例,并且通过类的实例,调用相应的方法。

    所以,门面类,功能就是把容器中的类,提供了一个直接访问的别名,其实跟容器中的别名没有太大区别,只是把访问方式变了而已。

  RegisterProviders.php

    直接调用app中的registerConfiguredProviders,注册app配置文件中的providers,同时注册PackageManifest中的providers。

  BootProviders.php

    运行所有provider的boot

所以,kernel整个功能就是:

1. 初始化针对网站配置的环境。

2. 添加meddlerware功能

3. 配置router,并把请求发送到router

laravel 核心类Kernel的更多相关文章

  1. Laravel 核心--Facades 门面

    Laravel 核心--Facades 门面 伊Summer 关注  0.1 2017.08.12 19:07* 字数 2017 阅读 1089评论 0喜欢 5 介绍 Facades 为应用的 IoC ...

  2. Laravel 核心概念

    工欲善其事,必先利其器.在开发Xblog的过程中,稍微领悟了一点Laravel的思想.确实如此,这篇文章读完你可能并不能从无到有写出一个博客,但知道Laravel的核心概念之后,当你再次写起Larav ...

  3. Laravel核心之IOC和Facade 架构分析1

    控制反转(Inversion of Control) 缩写为IoC 最常见的方式叫做依赖注入 简单说来,就是一个类把自己的的控制权交给另外一个对象,类间的依赖由这个对象去解决. Laravel 中的使 ...

  4. Laravel核心解读--HTTP内核

    Http Kernel Http Kernel是Laravel中用来串联框架的各个核心组件来网络请求的,简单的说只要是通过public/index.php来启动框架的都会用到Http Kernel,而 ...

  5. Laravel开发:Laravel核心——Ioc服务容器源码解析(服务器绑定)

    服务容器的绑定 bind 绑定 bind 绑定是服务容器最常用的绑定方式,在 上一篇文章中我们讨论过,bind 的绑定有三种: 绑定自身 绑定闭包 绑定接口 今天,我们这篇文章主要从源码上讲解 Ioc ...

  6. cesium核心类Viewer简介

    1.简单描述Viewer Viewer类是cesium的核心类,是地图可视化展示的主窗口,cesium程序应用的切入口,扮演必不可少的核心角色. 官网的英文解析如下: A base widget fo ...

  7. Webwork 学习之路【03】核心类 ServletDispatcher 的初始化

    1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...

  8. Hibernate核心类用法-使用Transaction管理事务

    一个典型的事务应该使用下面的形式 在创建完Session对象后即使用beginTransaction()启动事务 从此开始直到commit()之间的代码 都会处于同一个事务中 这两个函数之间所有的数据 ...

  9. 理解Lucene索引与搜索过程中的核心类

    理解索引过程中的核心类 执行简单索引的时候需要用的类有: IndexWriter.ƒDirectory.ƒAnalyzer.ƒDocument.ƒField 1.IndexWriter IndexWr ...

随机推荐

  1. django——web框架简介

    1.web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件. 应用程序有两种模式C/S.B/S.C/S是客户 ...

  2. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习3

    #include <iostream> using namespace std; void showmenu(void) { cout<<"Please enter ...

  3. angular.injector()

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Json.NET Performance Tips

    原文: http://www.newtonsoft.com/json/help/html/Performance.htm To keep an application consistently fas ...

  5. 隐藏用户建立(Powershell)

    最近做测试的时候发现,windows server2012 使用Mimikatz是直接抓不到明文密码的,而且,直接创建的账号登陆有时会碰到这个问题: ps:2012抓明文需要HKLM:\SYSTEM\ ...

  6. MySQL数据库下载安装和DataGrip的下载安装和破解

    一: 数据库下载 地址:官网https://dev.mysql.com/downloads/file/?id=482771;如果参数id失效,就选择之前的版本,5.7就可以,太新的没人用,老的很稳定. ...

  7. 数据结构-堆 Java实现

    数据结构-堆 Java实现. 实现堆自动增长 /** * 数据结构-堆. 自动增长 * */ public class Heap<T extends Comparable> { priva ...

  8. Java作业一 (2017-9-10)

    /*程序员龚猛*/ 1.3 public class Helloworld{  public static void main(String[] args) {   System.out.printl ...

  9. 英特尔神经棒使用入门-NCS2 & NCS1 -OpenVino

    |--背景: NCS1使用的NCSDK1和NCSDK2,速度一般,没有想象中的速度,能有TX2一半的速度吧.跟大佬又申请了个NCS2来试一试. 环境配置到跑通自己写的MNIST分类网络花了2天不到吧. ...

  10. Gym 101606B - Breaking Biscuits - [凸包+旋转卡壳][凸包的宽度]

    题目链接:https://codeforces.com/gym/101606/problem/B 题解: 对于给出的 $n$ 个点,先求这些点的凸包,然后用旋转卡壳求出凸包的宽度(Width (min ...