我正在做一个使用许多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文件。