Skip to content
softeg edited this page Sep 30, 2014 · 12 revisions

#Twig

La variable Twig {{ app }} est une variable globale, 

disponible partout dans vos vues. Elle contient quelques variables utiles, 

nous le verrons, dont le service « session » que nous venons d'utiliser via {{ app.session }}.
{{ … }}affiche quelque chose ;

{% … %}fait quelque chose ;

{# … #} n'affiche rien et ne fait rien : c'est la syntaxe pour les commentaires, qui peuvent être sur plusieurs lignes.

#####Récupérer le contenu d'un template

// Depuis un contrôleur

$contenu = $this->renderView('OCPlatformBundle:Advert:email.txt.twig', array(
  'var1' => $var1,
  'var2' => $var2
));

// Puis on envoie l'e-mail, par exemple :
mail('moi@openclassrooms.com', 'Inscription OK', $contenu);

#####Générer des url dans un template

<a href="{{ path('sdzblog_voir', { 'id': article_id }) }}">Lien vers l'article d'id {{ article_id }}</a>

#####Générer des url absolu dans le template

changer path() par url()

Le message flash
 {% for message in app.session.flashbag.get('info') %}
       <p>{{ message }}</p>
 {% endfor %}
Héritage des templates parents
{% extends "SdzBlogBundle::layout.html.twig" %}
L'inclusion de templates
{% include "SdzBlogBundle:Blog:formulaire.html.twig" %}
L'inclusion de contrôleurs
{{  render(controller("SdzBlogBundle:Blog:menu", {'nombre': 3})) }}
Syntaxe de base pour afficher des variables

Description

Exemple Twig

Équivalent PHP

Afficher une variable

Pseudo : {{ pseudo }}

Pseudo : <?php echo $pseudo; ?>

Afficher l'index d'un tableau

Identifiant : {{ user['id'] }}

Identifiant : <?php echo $user['id']; ?>

Afficher l'attribut d'un objet, dont le getter respecte la convention $objet->getAttribut()

Identifiant : {{ user.id }}

Identifiant : <?php echo $user->getId(); ?>

Afficher une variable en lui appliquant un filtre. Ici, « upper » met tout en majuscules :

Pseudo en majuscules : {{ pseudo|upper }}

Pseudo en lettre majuscules : <?php echo strtoupper($pseudo); ?>

Afficher une variable en combinant les filtres.
« striptags » supprime les balises HTML.
« title » met la première lettre de chaque mot en majuscule.
Notez l'ordre d'application des filtres, ici striptags est appliqué, puis title.

Message : {{ news.texte|striptags|title }}

Message : <?php echo ucwords(strip_tags($news->getTexte())); ?>

Utiliser un filtre avec des arguments.
Attention, il faut que date soit un objet de type Datetime ici.

Date : {{ date|date('d/m/Y') }}

Date : <?php echo $date->format('d/m/Y'); ?>

Concaténer

Identité : {{ nom ~ " " ~ prenom }}

Identité : <?php echo $nom.' '.$prenom; ?>

#####Précisions sur la syntaxe {{ objet.attribut }}

Le fonctionnement de la syntaxe {{ objet.attribut }} est un peu plus complexe qu'elle n'en a l'air. Elle ne fait pas seulement objet->getAttribut. En réalité, voici ce qu'elle fait exactement :

  • Elle vérifie si objet est un tableau, et si attribut est un index valide. Si c'est le cas, elle affiche objet['attribut'].

  • Sinon, et si objet est un objet, elle vérifie si attribut est un attribut valide (public donc). Si c'est le cas, elle affiche objet->attribut.

  • Sinon, et si objet est un objet, elle vérifie si attribut() est une méthode valide (publique donc). Si c'est le cas, elle affiche objet->attribut().

  • Sinon, et si objet est un objet, elle vérifie si getAttribut() est une méthode valide. Si c'est le cas, elle affiche objet->getAttribut().

  • Sinon, et si objet est un objet, elle vérifie si isAttribut() est une méthode valide. Si c'est le cas, elle affiche objet->isAttribut().

  • Sinon, elle n'affiche rien et retourne null.

#####Les filtres utiles

Filtre

Description

Exemple Twig

Upper

Met toutes les lettres en majuscules.

{{ var|upper }}

Striptags

Supprime toutes les balises XML.

{{ var|striptags }}

Date

Formate la date selon le format donné en argument. La variable en entrée doit être une instance de Datetime.

{{ date|date('d/m/Y') }}
Date d'aujourd'hui : {{ "now"|date('d/m/Y') }}

Format

Insère des variables dans un texte, équivalent à printf.

{{ "Il y a %s pommes et %s poires"|format(153, nb_poires) }}

Length

Retourne le nombre d'éléments du tableau, ou le nombre de caractères d'une chaîne.

Longueur de la variable : {{ texte|length }}
Nombre d'éléments du tableau : {{ tableau|length }}

La documentation de tous les filtres disponibles est dans la documentation officielle de Twig : [Lien](http://twig.sensiolabs.org/doc/filters/index.html)

#####Twig et la sécurité Affiche une variable avec les balises HTML par exemple inclure javascript. {{ ma_variable_html|raw }}

#####Les variables globales

Variable

Description

{{ app.request }}

Le service « request » qu'on a vu au chapitre précédent sur les contrôleurs.

{{ app.session }}

Le service « session » qu'on a vu également au chapitre précédent.

{{ app.environment }}

L'environnement courant : « dev », « prod », et ceux que vous avez définis.

{{ app.debug }}

True si le mode debug est activé, False sinon.

{{ app.security }}

Le service « security », que nous verrons plus loin dans ce cours.

{{ app.user }}

L'utilisateur courant, que nous verrons également plus loin dans ce cours.

Bien entendu on peut définir des variables globales dans l'application exemple :

# app/config/parameters.yml

parameters:
    # …
    app_webmaster: moi-même
# app/config/config.yml

twig:
    globals:
        webmaster: %app_webmaster%
<footer>Responsable du site : {{ webmaster }}.</footer>

#####Les structures de contrôle

Condition : {% if %}

exemple twig

{% if membre.age < 12 %}
  Il faut avoir 12 ans pour ce film.
{% elseif membre.age < 18 %}
  OK bon film.
{% else %}
  Un peu vieux pour voir ce film non ?
{% endif %}

Équivalent PHP :

<?php if($membre->getAge() < 12) { ?>
  Il faut avoir 12 ans pour ce film.
<?php } elseif($membre->getAge() < 18) { ?>
  OK bon film.
<?php } else { ?>
  Un peux vieux pour voir ce film non ?
<?php } ?>

Boucle : {% for %}

Exemple Twig :

<ul>
  {% for membre in liste_membres %}
    <li>{{ membre.pseudo }}</li>
  {% else %}
    <li>Pas d'utilisateur trouvé.</li>
  {% endfor %}
</ul>

Et pour avoir accès aux clés du tableau :

<select>
  {% for valeur, option in liste_options %}
    <option value="{{ valeur }}">{{ option }}</option>
  {% endfor %}
</select>

Équivalent PHP :

<ul>
<?php if(count($liste_membres) > 0) {
  foreach($liste_membres as $membre) {
    echo '<li>'.$membre->getPseudo().'</li>';
  }
} else { ?>
  <li>Pas d'utilisateur trouvé.</li>
<?php } ?>
</ul>

Avec les clés :

<?php
foreach($liste_options as $valeur => $option) {
  // …
}

Définition : {% set %}

{% set foo = 'bar' %}

Une petite information sur la structure {% for %}, celle-ci définit une variable {{ loop }} au sein de la boucle, qui contient les attributs suivants :

Variable

Description

{{ loop.index }}

Le numéro de l'itération courante (en commençant par 1).

{{ loop.index0 }}

Le numéro de l'itération courante (en commençant par 0).

{{ loop.revindex }}

Le nombre d'itérations restantes avant la fin de la boucle (en finissant par 1).

{{ loop.revindex0 }}

Le nombre d'itérations restantes avant la fin de la boucle (en finissant par 0).

{{ loop.first }}

true si c'est la première itération, false sinon.

{{ loop.last }}

true si c'est la dernière itération, false sinon.

{{ loop.length }}

Le nombre total d'itérations dans la boucle.

Defined

{% if var is defined %} … {% endif %}

Even / Odd

{% for valeur in liste %}
  <span class="{% if loop.index is even %}pair{% else %}
    impair{% endif %}">
    {{ valeur }}
  </span>
{% endfor %}

La documentation de tous les tests disponibles est dans la documentation officielle de Twig

Clone this wiki locally