web-dev-qa-db-ja.com

Symfony 4のカスタムTwig関数で(.env`ファイルから)環境変数を使用する

Symfony 4のカスタムTwig関数(.env)]で\Twig_SimpleFunctionファイルの環境変数を使用するにはどうすればよいですか?

10
jpyzio

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を返します。

7
martias

カスタム拡張機能を使用しない簡単な方法(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";
44
lfjeff