laravel 核心类Kernel
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的更多相关文章
- Laravel 核心--Facades 门面
Laravel 核心--Facades 门面 伊Summer 关注 0.1 2017.08.12 19:07* 字数 2017 阅读 1089评论 0喜欢 5 介绍 Facades 为应用的 IoC ...
- Laravel 核心概念
工欲善其事,必先利其器.在开发Xblog的过程中,稍微领悟了一点Laravel的思想.确实如此,这篇文章读完你可能并不能从无到有写出一个博客,但知道Laravel的核心概念之后,当你再次写起Larav ...
- Laravel核心之IOC和Facade 架构分析1
控制反转(Inversion of Control) 缩写为IoC 最常见的方式叫做依赖注入 简单说来,就是一个类把自己的的控制权交给另外一个对象,类间的依赖由这个对象去解决. Laravel 中的使 ...
- Laravel核心解读--HTTP内核
Http Kernel Http Kernel是Laravel中用来串联框架的各个核心组件来网络请求的,简单的说只要是通过public/index.php来启动框架的都会用到Http Kernel,而 ...
- Laravel开发:Laravel核心——Ioc服务容器源码解析(服务器绑定)
服务容器的绑定 bind 绑定 bind 绑定是服务容器最常用的绑定方式,在 上一篇文章中我们讨论过,bind 的绑定有三种: 绑定自身 绑定闭包 绑定接口 今天,我们这篇文章主要从源码上讲解 Ioc ...
- cesium核心类Viewer简介
1.简单描述Viewer Viewer类是cesium的核心类,是地图可视化展示的主窗口,cesium程序应用的切入口,扮演必不可少的核心角色. 官网的英文解析如下: A base widget fo ...
- Webwork 学习之路【03】核心类 ServletDispatcher 的初始化
1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...
- Hibernate核心类用法-使用Transaction管理事务
一个典型的事务应该使用下面的形式 在创建完Session对象后即使用beginTransaction()启动事务 从此开始直到commit()之间的代码 都会处于同一个事务中 这两个函数之间所有的数据 ...
- 理解Lucene索引与搜索过程中的核心类
理解索引过程中的核心类 执行简单索引的时候需要用的类有: IndexWriter.Directory.Analyzer.Document.Field 1.IndexWriter IndexWr ...
随机推荐
- 安装tensorflowGPU版本
ubuntu 16.0# 安装cuda ## 安装sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb.debsudo apt ...
- composer 常用操作
1.search 查询 例如:composer search redis 2.show 展示 例如: composer show -all predis/predis 3.require ...
- Java 接口 新特性(Java8)
Java8新特性之接口增强 在Java7以及以前的版本中,接口里的方法都是抽象的,并且不存在静态方法,属性默认修饰符是public static final.所有方法的声明都是public [返回类型 ...
- 201771010126 王燕《面向对象程序设计(java)》第二周学习总结
201771010126 王燕<面向对象程序设计(java)>第二周学习总结 一.理论知识学习部分 3.1j简单 的java应用程序 标识符由字母.下划线.美元符号和数字组成, 且第一个符 ...
- django缓存、信号、序列化
本篇导航: Django的缓存机制 Django的信号 Django的序列化 一.Django的缓存机制 1.缓存介绍 1)缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增, ...
- __x__(14)0906第三天__<iframe> 内联框架 引入有一个外部html页面
在现实开发中,不推荐使用内联框架,因为<iframe></iframe>中的内容不会被搜索引擎检索. 在特殊情况中,如内网项目,不用放在互联网上时,可以使用<iframe ...
- [LeetCode] Quad Tree Intersection 四叉树相交
A quadtree is a tree data in which each internal node has exactly four children: topLeft, topRight, ...
- HCNA-链路聚合(手工模式)
设置链路聚合1 模式设置为手动 进入端口设置链路聚合号 进入另一个端口设置链路聚合号 使用dis cur 查看到相应的端口已经设置为聚合状态 1.使用相同的方法进入端口 设置聚合 2.使用dis显示聚 ...
- OUTLOOK2019 解决 无法验证您连接到的服务器使用的安全证书
在配置好Outlook后,每次打开Outlook,都会弹框提醒“无法验证您连接到的服务器使用的安全证书”,网上搜的很多办法都无法解决,最后在微软的官方解答中找到了解决方案,分享给大家! 打开Out ...
- 2018-2019-2 网络对抗技术 20165317 Exp4 恶意代码分析
2018-2019-2 网络对抗技术 20165317 Exp4 恶意代码分析 实验要求 1.系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间 ...