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>
On peut mettre le design général dans un fichier sous app:
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