Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
framework-web:symfony:templates [2018/01/29 20:21] – [Faire {{#...}}] jcheron | framework-web:symfony:templates [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 78: | Ligne 78: | ||
=== Fonctions utiles === | === Fonctions utiles === | ||
+ | == attribute == | ||
+ | Permet d' | ||
+ | |||
+ | <sxh html> | ||
+ | {{ attribute(object, | ||
+ | {{ attribute(object, | ||
+ | {{ attribute(array, | ||
+ | </ | ||
== isDefined == | == isDefined == | ||
Ligne 84: | Ligne 92: | ||
<sxh html; | <sxh html; | ||
{% if var is defined %} … {% endif %} | {% if var is defined %} … {% endif %} | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Structuration de template ===== | ||
+ | |||
+ | Très souvent, les templates ont besoin de partager certains éléments : header, footer, barres de menus... | ||
+ | |||
+ | Twig permet de répondre à cette problématique à partir de l' | ||
+ | |||
+ | Soit un template père définissant le style, ainsi que quelques bloc nommés affichant ou non du contenu.\\ | ||
+ | Il est possible de créer des templates fils héritant du père et remplaçant ou ajoutant leur propre contenu dans les blocs définis.\\ | ||
+ | |||
+ | C'est ainsi que Twig permet de structurer un ensemble de pages, en uniformisant la présentation et en évitant les répétitions de code. | ||
+ | |||
+ | ==== Héritage et blocs ==== | ||
+ | |||
+ | Soit le template principal suivant : | ||
+ | |||
+ | <sxh html; | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <meta charset=" | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | <div id=" | ||
+ | {% block sidebar %} | ||
+ | <ul> | ||
+ | < | ||
+ | < | ||
+ | </ul> | ||
+ | {% endblock %} | ||
+ | </ | ||
+ | |||
+ | <div id=" | ||
+ | {% block body %}{% endblock %} | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | Il est possible de définir un template enfant de la façon suivante : | ||
+ | |||
+ | <sxh html; | ||
+ | {% extends ' | ||
+ | |||
+ | {% block title %}My cool blog posts{% endblock %} | ||
+ | |||
+ | {% block body %} | ||
+ | {% for entry in blog_entries %} | ||
+ | < | ||
+ | <p>{{ entry.body }}</ | ||
+ | {% endfor %} | ||
+ | {% endblock %} | ||
+ | </ | ||
+ | |||
+ | ==== Parent ==== | ||
+ | |||
+ | Il est possible de réutiliser le contenu affiché un bloc du template parent en utilisant la fonction **parent()** : | ||
+ | |||
+ | <sxh html> | ||
+ | {% block sidebar %} | ||
+ | < | ||
+ | |||
+ | {# ... #} | ||
+ | |||
+ | {{ parent() }} | ||
+ | {% endblock %} | ||
+ | </ | ||
+ | ==== Inclusion ==== | ||
+ | |||
+ | Soit le template suivant affichant le détail d'un article : | ||
+ | |||
+ | <sxh html; | ||
+ | < | ||
+ | <h3 class=" | ||
+ | |||
+ | <p> | ||
+ | {{ article.body }} | ||
+ | </p> | ||
+ | </ | ||
+ | |||
+ | Il est possible de réutiliser ce template pour afficher la liste des articles, par inclusion : | ||
+ | |||
+ | <sxh html; | ||
+ | {% extends ' | ||
+ | |||
+ | {% block body %} | ||
+ | < | ||
+ | |||
+ | {% for article in articles %} | ||
+ | {{ include(' | ||
+ | {% endfor %} | ||
+ | {% endblock %} | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Liens ===== | ||
+ | |||
+ | Soit la route suivante définie dans le contrôleur Welcome : | ||
+ | |||
+ | <sxh php; | ||
+ | use Symfony\Component\Routing\Annotation\Route; | ||
+ | |||
+ | class WelcomeController extends Controller | ||
+ | { | ||
+ | /** | ||
+ | * @Route("/", | ||
+ | */ | ||
+ | public function index() | ||
+ | { | ||
+ | // ... | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Il est possible de générer l'url correspondant à cette route en passant à la fonction **path** la propriété **name** de la route : welcome | ||
+ | <sxh html; | ||
+ | <a href=" | ||
+ | </ | ||
+ | |||
+ | |||
+ | Génération de route avec paramètres : | ||
+ | |||
+ | <sxh php; | ||
+ | use Symfony\Component\Routing\Annotation\Route; | ||
+ | |||
+ | class ArticleController extends Controller | ||
+ | { | ||
+ | /** | ||
+ | * @Route("/ | ||
+ | */ | ||
+ | public function show($slug) | ||
+ | { | ||
+ | // ... | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <sxh html; | ||
+ | {% for article in articles %} | ||
+ | <a href=" | ||
+ | {{ article.title }} | ||
+ | </a> | ||
+ | {% endfor %} | ||
+ | </ | ||
+ | |||
+ | Génération d'url absolue, à partir de la function **url()** : | ||
+ | |||
+ | <sxh html> | ||
+ | <a href=" | ||
</ | </ | ||