我想在服务中使用新的 Symfony 功能,即自动装配环境变量,以前我会将它们作为服务配置中的默认值。
当我们构建应用程序时,会保留一些环境变量,以便仅在需要时更改我们的行为。
在我在 services.yaml 中做之前
parameters:
env(PUBLISH_CHECK_CYCLE_SECONDS): '3600'
services:
_defaults:
bind:
$publishCheckCycleSeconds: '%env(int:PUBLISH_CHECK_CYCLE_SECONDS)%'
SomeService: ~ # for binds
其中 SomeService 包含
int $publishCheckCycleSeconds
作为构造函数参数。
这是很多样板文件,我想用这样的东西替换:
class SomeService {
public function __construct(
// ...
#[Autowire(env: 'bool:CACHE_EXPANDED_REFERENCES')]
private readonly bool $cacheExpandedEntities = true,
#[Autowire(env: 'int:CACHE_EXPANDED_REFERENCES_SECONDS')]
private readonly int $expandedReferencesCacheTime = 60 * 60 * 24,
) {
}
// ...
}
但是,在我们的 CI 中,我收到了有关缺少环境变量的错误:
In EnvVarProcessor.php line 217:
Environment variable not found: "CACHE_EXPANDED_REFERENCES".
这种方法的最佳实践是什么?我可以以某种方式设置默认值吗?我知道 env-processor
default
存在,但当我上次使用它时,似乎我只能引用其他变量作为默认值而不是值。不然我会尝试
#[Autowire(env: 'default:true:bool:CACHE_EXPANDED_REFERENCES')]
但这给了我一个不同的错误,即变量
true
未定义:
In EnvVarProcessor.php line 124:
Invalid env fallback in "default:true:bool:CACHE_EXPANDED_REFERENCES": para
meter "true" not found
创建后备变量似乎再次成为我想避免的样板。
您应该在
CACHE_EXPANDED_REFERENCES
文件中声明 .env
var。如果您愿意,您也可以在那里设置默认值,但至少 var 应该像 CACHE_EXPANDED_REFERENCES=
那样声明。如果您希望根据环境设置不同的值,您可以在 .env.test
、.env.prod
等文件中覆盖这些值。