laravel5.5入口文件分析

入口文件 public/index.php

1、加载composer的自动加载器

require __DIR__.'/../vendor/autoload.php';

自动加载,不用再各种require了,更重要的是可以使用composer管理包,管理依赖,可以参考下composer的使用。

2、bootstrap/app.php 得到laravel应用程序实例

$app = require_once __DIR__.'/../bootstrap/app.php';

bootstrap/app.php文件很简单,实例化并注册一些服务

//创建app实例,一切都是由此容器而起,包括服务提供者等等
$app = new IlluminateFoundationApplication(
    realpath(__DIR__.'/../')
);

//注册HTTP内核,web端的请求处理,查看下apphttpKernal父类
$app->singleton(
    IlluminateContractsHttpKernel::class,
    AppHttpKernel::class
);

//注册控制台内核,cli的请求处理
$app->singleton(
    IlluminateContractsConsoleKernel::class,
    AppConsoleKernel::class
);

//错误处理
$app->singleton(
    IlluminateContractsDebugExceptionHandler::class,
    AppExceptionsHandler::class
);


return $app;

3、HTTP/控制器内核

//上面注册过此服务,这里调用
$kernel = $app->make(IlluminateContractsHttpKernel::class);

//服务提供者的handle方法
$response = $kernel->handle(
    $request = IlluminateHttpRequest::capture()
);

$response->send();

$kernel->terminate($request, $response);