En cada request, Symfony establece una variable template global app por defecto. La variable app es una instancia de GlobalVariables que da acceso a algunas variables específicas de la aplicación automáticamente:
- app.user - El objeto user actual.
- app.request - El objeto request.
- app.session - El objeto session.
- app.environment - El entorno actual.
- app.debug - True si está en debug mode. Sino es false.
<p>Nombre de usuario: {{ app.user.username }}</p>
{% if app.debug %}
<p>Método request: {{ app.request.method }}</p>
<p>Entorno de la aplicación: {{ app.environment }}</p>
{% endif %}
Además puedes incluir variables globales propias, desde el archivo app/config/config.yml:
# app/config/config.yml
twig:
# ...
globals:
ga_tracking: UA-xxxxx-x
Ahora la variable ga_tracking está disponible en todas las templates Twig.
<p>El código de Google de tracking es: {{ ga_tracking }}</p>
Utilizar parámetros del Service Container
Puedes aprovechar las ventajas del sistema service parameters del contenedor de servicios que permite aislar o reusar el valor:
# app/config/parameters.yml
parameters:
ga_tracking: UA-xxxxx-x
En el archivo de configuración pondríamos entonces:
# app/config/config.yml
twig:
globals:
ga_tracking: '%ga_tracking%'
La misma variable está disponible de la misma forma que antes.
Referenciar services
En lugar de utilizar valores estáticos también puedes guardar el valor en un service. Siempre que se acceda a la variable global desde la template, se solicitará el service del service container y dará acceso a ese objeto.
El service no se carga en modo lazy. Es decir, tan pronto como se cargue Twig, el service se instancia, incluso si ni siquiera se utiliza esa variable.
Para definir un service como una variable Twig global, se prefija el string con @ (igual que como se hace en la configuración de services).
# app/config/config.yml
twig:
# ...
globals:
user_management: '@app.user_management'
Utilizar una extensión Twig
Si la variable global que quieres establecer es más complicada (como un objeto), no podrás emplear el método anterior. Para ello tendrás que crear una extensión Twig y devolver la variable global como una de las entradas en el método getGlobals.