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

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

August 22, 2019,
tags: php symfony env


このエントリーをはてなブックマークに追加

Symfonyではservices.yamlの中でenvの指定をすることが出来ます。

services:
    database_url: '%env(DATABASE_URL)%'

こんな感じに指定してた場合にCompilerPassで参照すると文字列として返ってきてしまいます。

<?php
class TestPass implements CompilerPassInterface
{
  public function process(ContainerBuilder $container)
  {
      $url = $container->getParameter('database_url')
  }
}

この場合$urlには%env(DATABASE_URL)%が入ってしまい、本来ほしかった.envで設定された値は取得できません。

これを解決するにはresolveEnvPlaceholdersメソッドを使います。

<?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