根据Symfony 5.4中的env var配置业务



我正在做一个使用许多env变量的项目,我使用php文件(而不是yaml文件或xml)来处理配置。

我正在尝试这个代码:

// config/may_conf_name.php

return static function (ContainerConfigurator $containerConfigurator): void {
$containerConfigurator->extension('my_extension', [
...
]);

// CLIENT_TYPE is an env variable
if ('http' === (string) env('CLIENT_TYPE')->string()) {
$services->alias(AbstractClient::class, HttpClient::class);
} else {
$services->alias(AbstractClient::class, AwsClient::class);
}

...
}

不幸的是,env('CLIENT_TYPE')->string())没有被解析

dump(
(string) env('CLIENT_TYPE')->string())
)
// output
^ "%env(string:CNT_CLIENT_TYPE)%"

显然,当我这样做时,它对我有效:

if (isset($_ENV['CLIENT_TYPE']) && 'http' === $_ENV['CLIENT_TYPE']) {
....
}

所以,我的问题是有一种方法来获得我的' CLIENT_TYPE ' env像env('CLIENT_TYPE')->string()?它"干净"吗?用$_ENV['CLIENT_TYPE']做这个?

谢谢!

看https://symfony.com/doc/current/service_container.html#binding-arguments-by-name-or-type

为您服务。在Yaml或PHP中,你可以绑定变量,这些变量将在autowired服务中自动导入。

在Yaml

bind:
$clientType: '%env(CLIENT_TYPE)%'

在php中

->bind('$clientType', '%env(CLIENT_TYPE)%')

然后在任何你想使用环境变量的服务中:

public function __construct(string $clientType)

$clientType将自动与您绑定的配置连接。

我不知道这是否正是你想要的,不要犹豫评论,我会更新我的答案,但我希望它至少会给你一个想法,该怎么做。

我问你的SF版本,因为如果你没有禁用它,自动装配在5.4上自动工作

如果CLIENT TYPE为空,表示它与您的symfony配置无关。这意味着你的env变量没有正确地写入当前的env文件。

相关内容

最新更新