一、Laravel5.5 入口文件源码阅读

我的项目根目录为D:/www/projectname,则入口文件位于D:/www/projectname/public目录下。

一 载入引导程序


require __DIR__.'/../bootstrap/autoload.php';
//__DIR__ = D:/www/projectname/public
//require D:/www/projectname/bootstrap/autoload.php

D:/www/projectname/bootstrap/autoload.php完整代码如下


define('LARAVEL_START', microtime(true));//记录程序开始运行的时间

//composer自动加载类库,当调用类的时候会自动引入
require __DIR__.'/../vendor/autoload.php';
//require D:/www/projectname/vendor/autoload.php

$compiledPath = __DIR__.'/cache/compiled.php';

//载入编译类
if (file_exists($compiledPath))//如果该编译类存在则载入
{
    require $compiledPath;
}

该编译文件默认不存在,需要调用 php artisan optimize --force artisan命令生成。
optimize命令把常用加载的类合并到一个文件里,通过减少文件的加载,来提高运行效率。
会生成bootstrap/cache/compiled.php bootstrap/cache/services.json两个文件。
你可以可以通过修改config/compile.php 文件来添加要合并的类。
在 production 环境中,参数 --force 不需要指定,文件就会自动生成。
要清除类映射加载优化,请运行以下命令:php artisan clear-compiled,此命令会删除上面 optimize 生成的两个文件。
注意:此命令要运行在 php artisan config:cache 后,因为 optimize 命令是根据配置信息(如:config/app.php 文件的 providers 数组)来生成文件的。

二 创建应用程序实例


$app = require_once __DIR__.'/../bootstrap/app.php';
//$app = D:/www/projectname/bootstrap/app.php

D:/www/projectname/bootstrap/app.php完整代码如下:


//传入根目录,并实例化应用
$app = new Illuminate\Foundation\Application(
    realpath(__DIR__.'/../')
);

//注册Http单例
$app->singleton(
    'Illuminate\Contracts\Http\Kernel',
    'App\Http\Kernel'
);

//注册Console单例
$app->singleton(
    'Illuminate\Contracts\Console\Kernel',
    'App\Console\Kernel'
);

//注册异常单例
$app->singleton(
    'Illuminate\Contracts\Debug\ExceptionHandler',
    'App\Exceptions\Handler'
);
return $app;

singleton 方法绑定一个只需要解析一次的类或接口到容器,然后接下来对容器的调用将会返回同一个实例:

三 从容器中解析给定类型


//解析Http对应的实现,该方法接收你想要解析的类名或接口名作为参数,返回对应实现的实例
$kernel = $app->make('Illuminate\Contracts\Http\Kernel');

//处理Requst请求,并返回Response
$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

//响应
$response->send();

//终止中间件
$kernel->terminate($request, $response);

以上只是个人的理解,可能有偏差。欢迎提出异议。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值