Twig
Généralités
Les templates TWIG sont rangées dans src\Machin\TrucBundle\Resources\views\Chose Généralement on donne le nom de l'action par exemple : add.html.twig Pour les appeler dans le contrôleur :
public function addAction() { $data = array( "var1" => 3, "var2" => "une chaîne", .... ); return $this ->get('templating') ->render('MachinTrucBundle:Chose:add.html.twig', $data); // ou en plus court return $this ->render('MachinTrucBundle:Chose:add.html.twig', $data); //on peut aussi récupérer le contenu HTML de la template, $contenu = $this->renderView('MachinTrucBundle:Chose:add.html.twig', $data); }
blocs et layout
block
On créé un layout général dans lequel on définit des blocs
{# src/Machin/TrucBundle/Resources/views/layout.html.twig #} <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>{% block title %}Mon site{% endblock %}</title> </head> <body> {% block menu %} {% endblock %} {% block body %} {% endblock %} </body> </html>
app/Resources/views/layout.html.twig
extends
Par ex : On peut créer un layout pour le controller Chose et l'action index dérivant d'un autre layout avec extends
.
On récupère le contenu des blocs du layout parent avec {{parent()}}
.
# src/Machin/TrucBundle/Resources/views/Chose/index.html.twig #} {% extends "MachinTrucBundle::layout.html.twig" %} # ou si mon layout parent est sous app {#{% extends "::layout.html.twig" %}#} {% block title %}{{ parent() }} - Accueil{% endblock %} {% block menu %} {% endblock %} {% block body %} <h1>Bonjour! </h1> {% endblock %}
include vs render
On peut inclure une template dans une autre , c'est à préférer à render, qui fait repasser par le controller.
Si les variables ont le même nom dans la template inclus pas besoin de les passer avec le with
.
{% block menu %} {% include "MachinTrucBundle:Chose:menu.html.twig" with {vr: var1} %} {% endblock %}
Syntaxe
{{ var1 }} #affiche la variable var1 {% set var1 = 8 %} # exécute var1=8 {# commentaire #} # pour les commentaires
Les variables
Accès aux variables et filtres d'affichage
# une variable simple <div> var1 : {{ var1 }} # element d'un tableau <div> {{ tab[id] }} </div> # attribut d'un objet <div> {{ obj.id }} </div> # methode d'un objet <div> {{ obj.getId() }} # les variables globales {{ app.request }}, {{ app.session }}, {{ app.environment }}, {{ app.debug }}, {{ app.security }}, {{ app.user }} # les filtres quelques exemples <div>Identifiant : {{ app.user.username|upper}}</div> <div>Identifiant : {{ app.security.getToken().getUser().getUsername()|striptags|title }}</div> <div>Date : {{ date|date('d/m/Y') }}</div>
Boucles et conditions
# condition {% if membre.age < 12 %} --- {% elseif membre.age < 18 %} --- {% else %} --- {% endif %} # boucle {% for valeur, option in liste_options %} <option value="{{ valeur }}">{{ option }}</option> {% endfor %}
Dans les boucles for, on a accès à des variables de boucle {{ loop.index }}
, {{loop.first}}
..etc\\
Suite Doctrine