Symfony 4のカスタムTwig関数(.env
)]で\Twig_SimpleFunction
ファイルの環境変数を使用するにはどうすればよいですか?
Dotenvコンポーネント をインストールして、getenv()
関数を使用できるようにします。
_<?php
// src/Twig/AppExtension.php
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class AppExtension extends AbstractExtension
{
public function getFunctions(): array
{
return [
new TwigFunction('my_function', [$this, 'myFunction']),
];
}
public function myFunction($varname)
{
$value = getenv($varname);
// Do something with $value...
return $value;
}
}
_
環境変数の値を返すだけの場合は、次のようにコードを単純化できます。
_<?php
// src/Twig/AppExtension.php
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class AppExtension extends AbstractExtension
{
public function getFunctions(): array
{
return [
new TwigFunction('my_function', 'getenv'),
];
}
}
_
いずれにしても、Twigでは次のことができます。
_{{ my_function('APP_ENV') }}
{% if my_function('MAILER_URL') == 'null://localhost' %}
Mailer URL not set!
{% endif %}
{# etc. #}
_
もちろん、より良い関数名は例えばgetenv
。ここでは_my_function
_を使用して、Dotenvコンポーネントが提供するgetenv()
関数と独自のコードを混同しないようにしました。
環境変数が見つからない場合、getenv()
関数はfalse
を返します。
カスタム拡張機能を使用しない簡単な方法(Symfony 4)を次に示します。私の場合、GoogleタグマネージャーIDを.env
ファイルの環境変数として設定したかったのです。
GOOGLE_TAG_MANAGER_ID="GTM-AAA12XX"
次に、config/packages/twig.yaml
ファイルの環境変数を参照します。
twig:
globals:
google_tag_manager_id: '%env(GOOGLE_TAG_MANAGER_ID)%'
これで、Twigテンプレートでタグマネージャーの値を使用できます。
{{ google_tag_manager_id }}
実動システムの場合、.env
ファイルがない場合があります。その場合、Apache構成ファイルで変数を設定します。
SetEnv GOOGLE_TAG_MANAGER_ID GTM-AAA12XX
私はnginxの設定ファイルで物事をテストしていませんが、これはうまくいくと思います:
fastcgi_param GOOGLE_TAG_MANAGER_ID "GTM-AAA12XX";