Versions
xx/04/2012: Création
13/09/2013: render en sf2.3
Contactez-nous
Kitpages
17 rue de la Frise
38000 Grenoble
tel : 04 58 00 33 81
Aide mémoire twig / symfony2
Introduction
Cette page contient les lignes twig (dans un contexte symfony2) qu'on passe notre vie à aller chercher dans la doc.
Fonctions ajoutées par symfony2
<!-- générer une URL -->
{{ path ("ma_route", {"elementId": 12} ) }}
<!-- appeler une action d'un bundle depuis un template twig -->
<!-- symfony 2.3 -->
{{ render(controller('AcmeArticleBundle:Article:recentArticles', {
'max': 3
} ) ) }}
<!-- avant symfony 2.3 -->
{% render 'KitpagesCmsBundle:Zone:widget' with {'slug': 'actuHome'} %}
<!-- inclure un template dans un autre -->
{% include 'AppSiteBundle:Page:template/_bigContent.html.twig' %}
<!-- inclure un template dans un autre en modifiant des variables,
only indique que les autres variables ne sont pas transmises -->
{% include 'AppSiteBundle:Page:template/_bigContent.html.twig'
with {'foo': 'bar'} only %}
<!-- accès à des assets globaux -->
<img src="{{asset('img/footer/logo-footer.png')}}" alt="back to home"/>
<!-- accès à un asset à l'intérieur d'un bundle -->
<link href="{{ asset('bundles/kitpagescms/css/common.css') }}" rel="stylesheet" type="text/css" media="all" />
Fonctions de traduction
Cette partie a été déplacée dans la page Traductions en sf2
Objects de l'application accessibles dans twig
Symfony2 envoie à twig une classe "app" permettant d'accéder à pas mal d'informations de l'application.
- app.security
- .token
- .key
- .user
- .roles
- .authenticated
- .attributes
- .alwaysAuthenticate
- app.user (entity User)
- app.request
- .attributes
- .query
- .server
- .files
- .cookies
- .headers
- .content
- .languages
- .charsets
- .acceptableContentTypes
- .pathInfo
- .requestUri
- .baseUrl
- .basePath
- .method
- .format
- app.session
- .locale
- .defaultLocale
- .saved
- app.environment
- app.debug
Tiré d'un billet du blog de Bertrand Zuchuat
<!-- Permet par exemple de récupérer le nom de la route -->
{{ app.request.attributes.get('_route') }}
Quelques syntaxes pratiques
<!-- formater une date -->
{{ entity.createdAt|date("d-m-Y") }}
<!-- assigner une variable -->
{% set img = data.media.mainImage.0.default|default('') %}
Quelques constructions twig courantes
<!-- boucle foreach -->
{% for line in lineList %}
<li>{{line.title}}</li>
{% endfor %}
<!-- boucle foreach avec clé -->
{% for key, line in lineList %}
<li>key={{key}}, content={{line.title}}</li>
{% endfor %}
<!-- définir et utiliser une variable twig -->
{% set img = data.root.media_mainImage|default('') %}
{{ img }}
<!-- condition if -->
{% if kenny.sick %}
Kenny is sick.
{% elseif kenny.dead %}
You killed Kenny!
{% else %}
Kenny looks okay --- so far
{% endif %}
<!-- tri par key -->
{% for key in valueList|keys|sort %}
{{ attribute(valueList, key) }}
{% endfor %}
Envoyer des valeurs globales ou des paramètres à twig
Régulièrement on a besoin d'envoyer une valeur constante (par exemple un paramètre symfony2) à tous les templates twig (la langue du site ou des blagues du genre...).
Imaginons qu'on ait un paramètre %site_name% dans le parameters.ini de symfony2. Si on veut le rendre disponible dans tous les templates twig, on doit ajouter une configuration dans le config.yml :
twig:
globals:
site_name_global: "%site_name%"
Ensuite on y accès simplement dans twig comme une variable standard
{{ site_name_global }}

plv)
<!-- Permet de faire appel à une variable externe dans un chemin (path ou asset), l'insertion ou l'extension d'un template (include ou extends), ou le retour d'un controlleur (render) --> {{ asset('path/' ~ dossier_variable ~ '/theme/style.css') }} {% include 'AppSiteBundle:Page:/' ~ nom.mavar ~ '.html.twig' %}Dans twig, pour faire un var_dump() de $varname : {% debug expression.varname %}Pour éviter l’erreur de conversion d'un dateTime en string, il est pratique d'utiliser ce filtre : {{ entity.createdAt|date("d-m-Y") }}pour enrichir le paragraphe "Quelques syntaxes twig courantes" {% if kenny.sick %} Kenny is sick. {% elseif kenny.dead %} You killed Kenny! You bastard!!! {% else %} Kenny looks okay --- so far {% endif %} Merci