Featured image of post SymfonyのCompilerPassで%env()%を利用する方法について

SymfonyのCompilerPassで%env()%を利用する方法について

Twitter ツイート Hatena Bookmark ブックマーク

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

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。