第一件事所有的请求都会被web服务器(Apache/Nginx)导向public/index.php文件.index.php文件载入Composer生成的自动加载设置,然后从bootstrap/app.php脚本获取Laravel应用的实例,

app -> Application实例(Illuminate\Foundation\Application)

Illuminate\Container\Container -> Application实例(Illuminate\Foundation\Application)

laravel的第一个动作就是创建服务容器实例.

注册基本服务提供者并启动

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\Foundation\Application.php第1026行registerCoreContainerAliases方法。

HTTP/Console 内核接下来,请求被发送到 HTTP 内核或 Console 内核,这取决于进入应用的请求类型。这两个内核是所有请求都要经过的中央处理器,让我们聚焦在位于 app/Http/Kernel.php 的 HTTP 内核。

HTTP 内核继承自 Illuminate\Foundation\Http\Kernel 类,它定义了一个 bootstrappers 数组,数组中的类在请求真正执行前进行前置执行。 这些引导程序配置了错误处理,日志记录,检测应用程序环境,以及其他在请求被处理前需要完成的工作。

HTTP 内核同时定义了一个 HTTP 中间件列表,所有的请求必须在处理前通过这些中间件,这些中间件处理 HTTP session的读写,判断应用是否在维护模式,验证CSRF token 等等

HTTP 内核的标志性 handle 方法是相当简单的:接收一个 Request 并返回一个 Response。你可以把内核想成一个代表你应用的大黑盒子。给它喂 HTTP 请求然后它就会吐给你 HTTP 响应。

服务提供者

在内核引导启动的过程中最重要的动作之一就是载入 服务提供者到你的应用。所有的服务提供者都配置在 config/app.php 文件中的 providers 数组中。 首先,所有提供者的 register 方法会被调用,接下来,一旦所有提供者注册完成,boot 方法将会被调用.

服务提供者负责引导启动框架的全部各种组件,例如数据库、队列、验证器以及路由组件。因为这些组件引导和配置了框架的各种功能,所以服务提供者是整个 Laravel 启动过程中最为重要的部分。

分发请求

一旦应用完成引导和所有服务提供者都注册完成,Request 将会移交给路由进行分发。路由将分发请求给一个路由或控制器,同时运行路由指定的中间件。

聚焦服务提供者

服务提供者是 Laravel 应用的真正关键部分,应用实例被创建后,服务提供者就会被注册完成,并将请求传递给应用进行处理,真的就是这么简单!

了解 Laravel 是怎样通过服务提供者构建和引导一个稳定的应用是非常有价值的,当然,应用的默认服务提供者都存放在 app/Providers 目录中。

在新创建的应用中,AppServiceProvider 文件中方法实现都是空的。这个提供者是你添加应用专属的引导和服务的最佳位置,当然的,对于大型应用你可能希望创建几个服务提供者,每个都具有粒度更精细的引导。

最新文章

  1. Linux shell编程
  2. 图片切换小demo
  3. python Tab自动补全命令设置
  4. ACM/ICPC 之 最长公共子序列计数及其回溯算法(51Nod-1006(最长公共子序列))
  5. C++中默认构造函数中数据成员的初始化
  6. Chapter Data Modification & Chapter Data Validation
  7. 四则运算三+psp0级表格
  8. 蒙特罗卡π算法(C++语言描述)
  9. 操作cookie
  10. 【暴力模拟】UVA 1594 - Ducci Sequence
  11. KEIL MDK环境下uCOS-II在LPC17xx上的移植实例
  12. iOS合并静态库文件
  13. USB接口定义
  14. 利用requestjs优化响应式移动端js加载
  15. Exiting the Matrix: Introducing Metasploit's Hardware Bridge
  16. Java开源生鲜电商平台-用户表的设计(源码可下载)
  17. Django REST framework基础:解析器和渲染器
  18. Java技术 第一次作业
  19. 如何推翻JAVA的统治地位?
  20. java大数相加

热门文章

  1. Hibernate学习笔记2.2(Hibernate基础Annotation配置)
  2. 带报表的asp.net项目不要升级
  3. RTX二次开发SDK需要注意的地方
  4. Ubuntu 下 redmine 安装配置
  5. python爬取酒店信息练习
  6. openssl 生成证书
  7. SpringBoot 热启动
  8. Handling Event
  9. 获取cookie
  10. 搭建asp渗透测试环境