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

Par Philippe Le Van (twitter accountplv) Dernière mise à jour : 13 September 2013

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 }}

Commentaires

Note : on ne peut plus ajouter de commentaire sur ce site
Ajout : insérer une variable dans une expression twig
<!-- 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' %}
Dump de variable Twig
Dans twig, pour faire un var_dump() de $varname : 
{% debug expression.varname %}
Afficher une date simplement avec twig
Pour éviter l’erreur de conversion d'un dateTime en string, il est pratique d'utiliser ce filtre :
{{ entity.createdAt|date("d-m-Y") }}
Syntaxe if
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