Symfonyではservices.yamlの中でenvの指定をすることが出来ます。
1
2
|
services:
database_url: '%env(DATABASE_URL)%'
|
こんな感じに指定してた場合にCompilerPassで参照すると文字列として返ってきてしまいます。
1
2
3
4
5
6
7
8
|
<?php
class TestPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$url = $container->getParameter('database_url')
}
}
|
この場合$urlには%env(DATABASE_URL)%が入ってしまい、本来ほしかった.envで設定された値は取得できません。
これを解決するにはresolveEnvPlaceholdersメソッドを使います。
1
2
3
4
5
6
7
8
|
<?php
class TestPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$url = $container->resolveEnvPlaceholders($container->getParameter('database_url'), true)
}
}
|
これで.envで設定したDATABASE_URLの値を利用することができます。
参考
Can not read env()-parameter in a Compiler Pass #22456