public/index.php
此文件会加载由 Composer 生成的自动加载器定义
并获取由 bootstrap/app.php 文件中所生成的 Laravel 应用程序实例
bootstrap/app.php
生成Laravel应用程序实例 $app
并且绑定核心 App\Http\Kernel::class 或 App\Console\Kernel::class
这取决于请求类型 在这里请求经过一些列操作 最终返回浏览器
app/Http/Kernel.php
一般情况是 HTTP 请求,所以主要说些这个
这个类继承自 Illuminate\Foundation\Http\Kernel 它定义了一个 bootstrappers 数组,在请求被运行前会先行运作。这些启动器设置了错误处理、日志记录、侦测应用程序环境,并运行其它需要在请求实际处理前就该被完成掉的工作。
其实这个过程就是 启动框架的服务提供者 -> Illuminate\Foundation\Bootstrap\BootProviders 这个继承自 Illuminate\Contracts\Foundation\Application 但是实现却是一开始的 Illuminate\Foundation\Application 也就是创建框架实例那个文件里 有这个方法 (有点搞不懂 继承自一个接口,接口没有功能,自己也没有功能,而下面实现这个功能的又没有继承他 那如何找到这个功能的呢) 看这里接口说明
app/Http/Kernel.php
HTTP 核心也定义了一份 HTTP 中间件 清单,所有的请求在被应用程序处理之前都必须经过它们。这些中间件处理 HTTP session 的读写、验证 CSRF 令牌、决定应用程序是否处于维护模式,以及其它更多任务作。
router
所有服务提供者加载完毕后,把request请求转移给router路由器
经过router分派给route(路由)或者controller,并运行中间件处理后返回response(响应)
整个启动流程,主要涉及的几个文件如下
public/index.php,bootstrap/app.php,app/Http/Kernel.php,
除了Kernel另外两个文件去掉注释,基本很简洁
public/index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle( $request = Illuminate\Http\Request::capture() );
$response->send();
$kernel->terminate($request, $response);
|
bootstrap/app.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?php
$app = new Illuminate\Foundation\Application( realpath(__DIR__.'/../') );
$app->singleton( Illuminate\Contracts\Http\Kernel::class, App\Http\Kernel::class );
$app->singleton( Illuminate\Contracts\Console\Kernel::class, App\Console\Kernel::class );
$app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions\Handler::class );
return $app;
|
app/Http/Kernel.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel { protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ];
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'test'=> \App\Http\Middleware\TestMiddleware::class, 'mi'=> \App\Http\Middleware\MiMiddleware::class, ]; }
|
结合图片就大致了解,laravel的启动过程.
通过上面注释文件,估计大多数悟性爆表的同学已经明白整个过程了.还有极少数晕乎少年没有明白.这里再多说几句.
其实整个流程就三部 全部在index.php这个文件里
启动框架
这个是由 app.php做到的 并准备好中间 服务待用
创建http内核
响应请求