概述
我的项目根目录为
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 IlluminateFoundationApplication(
realpath(__DIR__.'/../')
);
//注册Http单例
$app->singleton(
'IlluminateContractsHttpKernel',
'AppHttpKernel'
);
//注册Console单例
$app->singleton(
'IlluminateContractsConsoleKernel',
'AppConsoleKernel'
);
//注册异常单例
$app->singleton(
'IlluminateContractsDebugExceptionHandler',
'AppExceptionsHandler'
);
return $app;
singleton 方法绑定一个只需要解析一次的类或接口到容器,然后接下来对容器的调用将会返回同一个实例:
三 从容器中解析给定类型
//解析Http对应的实现,该方法接收你想要解析的类名或接口名作为参数,返回对应实现的实例
$kernel = $app->make('IlluminateContractsHttpKernel');
//处理Requst请求,并返回Response
$response = $kernel->handle(
$request = IlluminateHttpRequest::capture()
);
//响应
$response->send();
//终止中间件
$kernel->terminate($request, $response);
以上只是个人的理解,可能有偏差。欢迎提出异议。
最后
以上就是鲤鱼宝贝为你收集整理的一、Laravel5.5 入口文件源码阅读的全部内容,希望文章能够帮你解决一、Laravel5.5 入口文件源码阅读所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复