web-dev-qa-db-fra.com

Utiliser une variable d'environnement (du fichier `.env`) dans la fonction Twig Twig $ dans Symfony 4)

Comment puis-je utiliser une variable d'environnement du .env fichier dans une fonction personnalisée Twig (\Twig_SimpleFunction) dans Symfony 4?

10
jpyzio

Installez le composant Dotenv pour pouvoir utiliser la fonction 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;
    }
}

Si vous souhaitez simplement renvoyer la valeur de la variable d'environnement, vous pouvez simplifier le code comme ceci:

<?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'),
        ];
    }
}

Quoi qu'il en soit, dans Twig vous pouvez alors faire:

{{ my_function('APP_ENV') }}

{% if my_function('MAILER_URL') == 'null://localhost' %}
    Mailer URL not set!
{% endif %}

{# etc. #}

Un meilleur nom de fonction serait bien sûr par exemple getenv. Ici, j'ai utilisé my_function Afin que notre propre code ne soit pas confondu avec la fonction getenv() fournie par le composant Dotenv.

La fonction getenv() renvoie false si la variable d'environnement n'est pas trouvée.

7
martias

Voici un moyen plus simple (Symfony 4) qui n'implique aucune extension personnalisée. Dans mon cas, je voulais définir l'ID Google Tag Manager en tant que variable d'environnement dans le .env fichier:

GOOGLE_TAG_MANAGER_ID="GTM-AAA12XX"

Ensuite, référencez la variable d'environnement dans le config/packages/twig.yaml fichier:

twig:
    globals:
        google_tag_manager_id: '%env(GOOGLE_TAG_MANAGER_ID)%'

Vous pouvez maintenant utiliser la valeur du gestionnaire de balises dans vos modèles Twig comme ceci:

{{ google_tag_manager_id }}

Pour un système de production, vous ne pouvez pas avoir un .env fichier. Dans ce cas, définissez la variable dans votre fichier de configuration Apache:

SetEnv GOOGLE_TAG_MANAGER_ID GTM-AAA12XX

Je n'ai pas testé les choses avec les fichiers de configuration nginx, mais je pense que cela devrait fonctionner:

fastcgi_param GOOGLE_TAG_MANAGER_ID "GTM-AAA12XX";
44
lfjeff