第一件事全部的请求都会被web服务器(Apache/Nginx)导向public/index.php文件.index.php文件载入Composer生成的自动加载设置,而后从bootstrap/app.php脚本获取Laravel应用的实例,php
app -> Application实例(Illuminate\Foundation\Application)laravel
Illuminate\Container\Container -> Application实例(Illuminate\Foundation\Application)web
laravel的第一个动做就是建立服务容器实例.数据库
EventServieProvider —— 事件服务提供者bootstrap
$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(); }
第1026行方法。Illuminate\Foundation\Application.phpregisterCoreContainerAliases
HTTP/Console 内核接下来,请求被发送到 HTTP 内核或 Console 内核,这取决于进入应用的请求类型。这两个内核是全部请求都要通过的中央处理器,让咱们聚焦在位于 app/Http/Kernel.php
的 HTTP 内核。服务器
HTTP 内核继承自 Illuminate\Foundation\Http\Kernel
类,它定义了一个 bootstrappers
数组,数组中的类在请求真正执行前进行前置执行。 这些引导程序配置了错误处理,日志记录,检测应用程序环境,以及其余在请求被处理前须要完成的工做。session
HTTP 内核同时定义了一个 HTTP 中间件列表,全部的请求必须在处理前经过这些中间件,这些中间件处理 HTTP session的读写,判断应用是否在维护模式,验证CSRF token 等等app
HTTP 内核的标志性 handle
方法是至关简单的:接收一个 Request
并返回一个 Response
。你能够把内核想成一个表明你应用的大黑盒子。给它喂 HTTP 请求而后它就会吐给你 HTTP 响应。框架
在内核引导启动的过程当中最重要的动做之一就是载入 服务提供者到你的应用。全部的服务提供者都配置在 config/app.php
文件中的 providers
数组中。 首先,全部提供者的 register
方法会被调用,接下来,一旦全部提供者注册完成,boot
方法将会被调用.
服务提供者负责引导启动框架的所有各类组件,例如数据库、队列、验证器以及路由组件。由于这些组件引导和配置了框架的各类功能,因此服务提供者是整个 Laravel 启动过程当中最为重要的部分。
一旦应用完成引导和全部服务提供者都注册完成,Request
将会移交给路由进行分发。路由将分发请求给一个路由或控制器,同时运行路由指定的中间件。
服务提供者是 Laravel 应用的真正关键部分,应用实例被建立后,服务提供者就会被注册完成,并将请求传递给应用进行处理,真的就是这么简单!
了解 Laravel 是怎样经过服务提供者构建和引导一个稳定的应用是很是有价值的,固然,应用的默认服务提供者都存放在 app/Providers
目录中。
在新建立的应用中,AppServiceProvider
文件中方法实现都是空的。这个提供者是你添加应用专属的引导和服务的最佳位置,固然的,对于大型应用你可能但愿建立几个服务提供者,每一个都具备粒度更精细的引导。