Cómo recuperar variables declaradas en el archivo .env directamente desde una vista Twig en Symfony 5

En Symfony 3, solíamos almacenar parámetros que necesitábamos accesibles globalmente en el archivo parameters.yaml, como el ID de Google Analytics, el ID de recaptcha, etc. Sin embargo, en Symfony 4, la introducción del archivo .env movió todos esos parámetros que solíamos colocar en ese archivo, al nuevo. Hasta la fecha, para algunos desarrolladores no está tan claro cómo obtener estos valores ahora dentro de una vista Twig.

En este breve artículo, le mostraremos 3 formas de obtener el valor de tu archivo .env usando Twig en su proyecto Symfony 5.

Pasa el parámetro a la vista desde el controlador

La solución más obvia para obtener un parámetro .env dentro de una vista twig es simplemente pasarlo desde el controlador como una variable regular:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class PagesController extends AbstractController
{
    /**
     * @Route("/", name="index")
     */
    public function index(): Response
    {
        return $this->render('pages/index.html.twig', [
            'environment' => $_ENV["APP_ENV"],
        ]);
    }
}

Luego en la vista:

{% extends 'base.html.twig' %}

{% block title %}Index Page{% endblock %}

{% block body %}
    {{ environment }}
{% endblock %}

Uso de una función personalizada Twig

La otra opción, que ciertamente se adapta mejor en la mayoría de los casos, es crear una nueva función personalizada twig que devuelva la variable de entorno en sus vistas directamente. Crea la nueva extensión si no has creado ninguna y registra la nueva función get_env:

<?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('get_env', [$this, 'getEnvironmentVariable']),
        ];
    }
    
    /**
     * Devuelve el valor de la variable de entorno solicitada.
     * 
     * @param String $varname
     * @return String
     */
    public function getEnvironmentVariable($varname)
    {
        return $_ENV[$varname];
    }
}

Después de crear el archivo (o registrar la nueva función), deberías poder usarlo ahora en tus vistas de Twig de esta manera:

{# Outputs in this case: dev #}
{{ get_env("APP_ENV") }}

Con este enfoque, ya no deberías necesitar crear una nueva clave en el archivo parameters.yaml que obtiene el parámetro con ENV.

Registre la variable de entorno en Twig Globals

Si no tiene que trabajar con muchas variables de entorno, esta opción es probablemente la más sencilla. En Symfony, puedes registrar variables globales en Twig a través del archivo de configuración ( app/config/packages/twig.yaml) bajo la clave global:

# app/config/packages/twig.yaml
twig:
    default_path: '%kernel.project_dir%/templates'
    
    # Registrar variable global bajo la llave globals
    globals:
        mycustom_variable: 12345
        # Obtener variable del archive .env
        app_environment: '%env(APP_ENV)%'

En este caso, puede obtener el valor de la clave definida como una variable global en Twig así:

{# Imprime: 12345 #}
{{ mycustom_variable }}
{# Imprime: dev #}
{{ app_environment }}

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable