Laravel的配置加载其实就是加载config目录下所有文件配置。如何过使用
php artisan config:cache
则会把加载的配置合并到一个配置文件中,下次请求就不会再去加载config目录。
LoadEnvironmentVariables
.env环境配置加载。如果缓存配置是不会加载.env
的LoadConfiguration
判断是否缓存配置内核启动的时候。加载以下启动类
\Illuminate\Foundation\Http\Kernel
类
protected $bootstrappers = [
\Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class, // 加载 .env
\Illuminate\Foundation\Bootstrap\LoadConfiguration::class, // 加载config配置
...
];
本文重点讲解第二个config
配置加载。第一个请查看 深入理解 Laravel 中.env 文件读取
LoadConfiguration类中config配置加载的具体逻辑。
其实就是判断缓存是否存在,存在则加载,不存在则递归遍历config
目录所有php
文件。如果运行php artisan config:cache
,则会把加载结果保存在bootstrap/cache
目录中;你可能还会看到services.php
文件,这是一个保存所有的服务提供者的文件,具体以后会讲。
public function bootstrap(Application $app)
{
$items = [];
// 首先,我们将看看是否有缓存配置文件。 如果是,我们将从该文件加载配置项,因此它非常快。
// 否则,我们需要遍历每个配置文件并加载它们。
if (file_exists($cached = $app->getCachedConfigPath())) {
// 加载缓存的配置文件
$items = require $cached;
$loadedFromCache = true;
}
// 接下来,我们将遍历配置目录中的所有配置文件,并将每个配置文件加载到Repository中。
// 这将使开发人员可以使用所有选项,以便在此应用程序的各个部分中使用。
$app->instance('config', $config = new Repository($items));
// 如果没有缓存配置才会去加载config目录
if (! isset($loadedFromCache)) {
// 加载config目录所有PHP文件
$this->loadConfigurationFiles($app, $config);
}
//最后,我们将根据加载的配置值设置应用程序的环境。
// 我们将传递一个回调,该回调将用于在Web环境中获取环境,其中不存在“--env”开关。
$app->detectEnvironment(function () use ($config) {
return $config->get('app.env', 'production');
});
// 设置时区
date_default_timezone_set($config->get('app.timezone', 'UTC'));
mb_internal_encoding('UTF-8');
}
/**
* 从所有文件加载配置项。因此效率很低
*
* @param \Illuminate\Contracts\Foundation\Application $app
* @param \Illuminate\Contracts\Config\Repository $repository
* @return void
* @throws \Exception
*/
protected function loadConfigurationFiles(Application $app, RepositoryContract $repository)
{
// 遍历出所有PHP文件
$files = $this->getConfigurationFiles($app);
if (! isset($files['app'])) {
throw new Exception('Unable to load the "app" configuration file.');
}
// 一个一个的加载
foreach ($files as $key => $path) {
$repository->set($key, require $path);
}
}
php artisan config:cache
之后不会加载config配置,即便你修改了config目录中的配置文件也是不生效的,除非清除缓存php artisna config:clear
,或者重新缓存 php artisan config:cache
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
},
"files": [
# 这样那个会加载helpers.php文件了。该文件定义的是辅助函数
"bootstrap/helpers.php"
]
},
config
中调用其他的 config('something.item')
是不会预期的加载的。因为不能保证配置something.item
已经加载到了发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112433.html原文链接:https://javaforall.cn