Comment puis-je utiliser une variable d'environnement du .env
fichier dans une fonction personnalisée Twig (\Twig_SimpleFunction
) dans Symfony 4?
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.
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";