如果 envvar 不存在,则使用默认值自动装配 env var

问题描述 投票:0回答:1

我想在服务中使用新的 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

创建后备变量似乎再次成为我想避免的样板。

symfony environment-variables symfony6
1个回答
0
投票

您应该在

CACHE_EXPANDED_REFERENCES
文件中声明
.env
var。如果您愿意,您也可以在那里设置默认值,但至少 var 应该像
CACHE_EXPANDED_REFERENCES=
那样声明。如果您希望根据环境设置不同的值,您可以在
.env.test
.env.prod
等文件中覆盖这些值。

© www.soinside.com 2019 - 2024. All rights reserved.