-
Notifications
You must be signed in to change notification settings - Fork 1
Twig
#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()
{% for message in app.session.flashbag.get('info') %}
<p>{{ message }}</p>
{% endfor %}
{% extends "SdzBlogBundle::layout.html.twig" %}
{% include "SdzBlogBundle:Blog:formulaire.html.twig" %}
{{ render(controller("SdzBlogBundle:Blog:menu", {'nombre': 3})) }}
Description |
Exemple Twig |
Équivalent PHP |
|---|---|---|
Afficher une variable |
|
|
Afficher l'index d'un tableau |
|
|
Afficher l'attribut d'un objet, dont le getter respecte la convention |
|
|
Afficher une variable en lui appliquant un filtre. Ici, « upper » met tout en majuscules : |
|
|
Afficher une variable en combinant les filtres. |
|
|
Utiliser un filtre avec des arguments. |
|
|
Concaténer |
|
|
#####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 |
|---|---|---|
Met toutes les lettres en majuscules. |
|
|
Supprime toutes les balises XML. |
|
|
Formate la date selon le format donné en argument. La variable en entrée doit être une instance de |
|
|
Insère des variables dans un texte, équivalent à |
|
|
Retourne le nombre d'éléments du tableau, ou le nombre de caractères d'une chaîne. |
|
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 |
|---|---|
|
Le service « request » qu'on a vu au chapitre précédent sur les contrôleurs. |
|
Le service « session » qu'on a vu également au chapitre précédent. |
|
L'environnement courant : « dev », « prod », et ceux que vous avez définis. |
|
|
|
Le service « security », que nous verrons plus loin dans ce cours. |
|
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
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 } ?>
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) {
// …
}
{% 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 |
|---|---|
|
Le numéro de l'itération courante (en commençant par 1). |
|
Le numéro de l'itération courante (en commençant par 0). |
|
Le nombre d'itérations restantes avant la fin de la boucle (en finissant par 1). |
|
Le nombre d'itérations restantes avant la fin de la boucle (en finissant par 0). |
|
|
|
|
|
Le nombre total d'itérations dans la boucle. |
{% if var is defined %} … {% endif %}
{% 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