即使设置了值,是否也会评估 .env 回退?
Is .env fallback evaluated even though the value is set?
给定以下行:
env('AN_ENV_KEY', file_exists('my\path') ? 'value' : 'other-value');
即使在 .env
文件中指定了 AN_ENV_KEY
,是否也会评估回退?
我问这个是因为在我的服务器中,项目更新后,其中一个依赖项在其更改中添加了类似的行,现在部署失败,即使我由于某些权限指定了 AN_ENV_KEY=value
file_exists()
部分
的问题
我只是对此感到好奇,因为我的假设是如果设置了该值,则应省略回退。
提前致谢
否,如果在 .env
文件中找到该值,则不会评估回退。如果设置了值,则返回它。
您可以在 checking the code 上看到 Github。
由于您正在定义此 env 变量,因此您应该更改此配置文件。此处有 2 个参数传递给 env
,并且在将它们传递给函数时必须解析所有这些参数。这甚至在函数 运行s 之前,因此不管该环境变量是否存在,无论如何都会发生 file_exists
调用。
您可以删除使用 file_exists
的表达式,因为您正在设置 env 变量。
env('USER_MODEL', 'some sane default?');
这很好,因为您应该将此配置文件发布到您的应用程序配置中,因此此时您可以控制它。
第 2 部分
既然您的配置文件版本已修复,我们不希望合并包的配置文件,因为它仍会尝试每次都执行此 file_exists
调用。为此,我们将扩展他们的提供者并覆盖 register
方法。然后我们会将您的提供者版本添加到提供者列表中,并告诉自动发现系统忽略此包(因此它不会注册其提供者或别名):
app/Providers/SomeCoolNamedProvider
:
namespace App\Providers;
use Silvanite\Brandenburg\Providers\BrandenburgServiceProvider;
class SomeCoolNamedProvider extends BrandenburgServiceProvider
{
public function register()
{
// in their version they merge the config here
// but we don't want that, so leave this blank
}
}
config/app.php
:
$providers = [
...
App\Providers\SomeCoolNamedProvider::class,
];
$aliases = [
...
'BrandenburgPolicy' => Silvanite\Brandenburg\Facades\PolicyFacade::class,
];
composer.json
:
"extra": {
"laravel": {
"dont-discover": [
"silvanite/brandenburg"
]
}
},
您可以运行此后的自动发现命令,php artisan package:discover
给定以下行:
env('AN_ENV_KEY', file_exists('my\path') ? 'value' : 'other-value');
即使在 .env
文件中指定了 AN_ENV_KEY
,是否也会评估回退?
我问这个是因为在我的服务器中,项目更新后,其中一个依赖项在其更改中添加了类似的行,现在部署失败,即使我由于某些权限指定了 AN_ENV_KEY=value
file_exists()
部分
我只是对此感到好奇,因为我的假设是如果设置了该值,则应省略回退。
提前致谢
否,如果在 .env
文件中找到该值,则不会评估回退。如果设置了值,则返回它。
您可以在 checking the code 上看到 Github。
由于您正在定义此 env 变量,因此您应该更改此配置文件。此处有 2 个参数传递给 env
,并且在将它们传递给函数时必须解析所有这些参数。这甚至在函数 运行s 之前,因此不管该环境变量是否存在,无论如何都会发生 file_exists
调用。
您可以删除使用 file_exists
的表达式,因为您正在设置 env 变量。
env('USER_MODEL', 'some sane default?');
这很好,因为您应该将此配置文件发布到您的应用程序配置中,因此此时您可以控制它。
第 2 部分
既然您的配置文件版本已修复,我们不希望合并包的配置文件,因为它仍会尝试每次都执行此 file_exists
调用。为此,我们将扩展他们的提供者并覆盖 register
方法。然后我们会将您的提供者版本添加到提供者列表中,并告诉自动发现系统忽略此包(因此它不会注册其提供者或别名):
app/Providers/SomeCoolNamedProvider
:
namespace App\Providers;
use Silvanite\Brandenburg\Providers\BrandenburgServiceProvider;
class SomeCoolNamedProvider extends BrandenburgServiceProvider
{
public function register()
{
// in their version they merge the config here
// but we don't want that, so leave this blank
}
}
config/app.php
:
$providers = [
...
App\Providers\SomeCoolNamedProvider::class,
];
$aliases = [
...
'BrandenburgPolicy' => Silvanite\Brandenburg\Facades\PolicyFacade::class,
];
composer.json
:
"extra": {
"laravel": {
"dont-discover": [
"silvanite/brandenburg"
]
}
},
您可以运行此后的自动发现命令,php artisan package:discover