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

转载于:https://www.cnblogs.com/yxzamy/p/7614589.html

laravel 核心类Kernel相关推荐

  1. Laravel核心解读--完结篇

    过去一年时间写了20多篇文章来探讨了我认为的Larave框架最核心部分的设计思路.代码实现.通过更新文章自己在软件设计.文字表达方面都有所提高,在刚开始决定写Laravel源码分析地文章的时候我地期望 ...

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

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

  3. Laravel核心解读--完结篇 1

    过去一年时间写了20多篇文章来探讨了我认为的Larave框架最核心部分的设计思路.代码实现.通过更新文章自己在软件设计.文字表达方面都有所提高,在刚开始决定写Laravel源码分析地文章的时候我地期望 ...

  4. Laravel核心解读 -- Request

    Request 很多框架都会将来自客户端的请求抽象成类方便应用程序使用,在Laravel中也不例外.Illuminate\Http\Request类在Laravel框架中就是对客户端请求的抽象,它是构 ...

  5. Laravel核心解读--服务容器(IocContainer)

    Laravel的核心是IocContainer, 文档中称其为"服务容器",服务容器是一个用于管理类依赖和执行依赖注入的强大工具,Laravel中的功能模块比如 Route.Elo ...

  6. laravel 核心架构(1)服务容器-深入理解控制反转(IoC)和依赖注入(DI)

    1. 介绍 laravel 容器 存放的 是对象.对象的描述(类.接口)或者是提供对象的回调,通过这种容器,我们得以实现许多高级的功能,其中最常提到的,就是 "解耦"." ...

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

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

  8. java开怎么能不知道Netty几个核心类呢?

    ByteBuf JDK原生ByteBuffer的核心功能 字节缓冲区,主要对字节进行操作的一个类 能够将缓冲区建立在堆内和堆外.普通的new byte[] ,都只是建立在堆内 Netty之所以要自己封 ...

  9. 轻轻的我走了,正如我轻轻的来…——ADO.NET核心类的灭度与SQLHelper的诞生——十八相送(下)...

    源代码:13033480群共享 ADO.NET的SqlServer.NET数据提供程序,核心的类有4个,而在这个订餐系统中,我们只使用了3个,SqlConnection.SqlCommand.SqlD ...

最新文章

  1. c mysql 关闭连接池_数据库连接池关闭的时间
  2. TCanvas 学习
  3. alert 回调_JavaScript中到底什么时候回调函数Callback
  4. android每日一问【2011-8-26】
  5. Android微信支付爬坑
  6. 2022年最新全国各省五级行政区划代码(省/市/区县/乡镇/村)
  7. mall商城 -小程序,h5和pc vue前后端分离
  8. ubuntu从源码编译安装python
  9. 人文社科开放数据库汇总
  10. 【BI学习作业04-ALS算法与推荐系统】
  11. 111111111111
  12. Python无法打开excel文档解决办法
  13. 【数据报表中心】强大的迈安2019年大数据分析有哪些工具
  14. The package java.awt is not accessible的解决方案
  15. AI 教你画油画:任意画风都可驾驭
  16. jquery mobile外部js无法载入问题
  17. LWIP之DNS域名解析(二)
  18. 常用ruby gem
  19. python人脸识别算法_python人脸算法
  20. [UNR #6]机器人表演

热门文章

  1. 怎样在接口地址中添加请求头参数_jmeter5.3做soap接口性能测试配置
  2. mysql has gone away 自动连接_MySQL-出现 MySQL server has gone away 原因和解决方法
  3. mysql 局域网_MySQL 局域网授权问题
  4. java+io+scanner_Java知识点总结(JavaIO- Scanner类 )
  5. python可以用来写导航吗_在python中使用selenium进行导航
  6. node.js学习文档_学习NodeJs从每天一个小知识点开始
  7. 频率波数域matlab,频率-波数域方法的发展及其在台阵数据分析中的应用
  8. python请输入星期几的第一个_python如何获取星期几
  9. 超分辨率分析(一)--传统方案综述
  10. 系统学习深度学习(二) --自编码器,DA算法,SDA,稀疏自编码器