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:25] – [Faire {{#...}}] jcheron | framework-web:symfony:templates [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 95: | Ligne 95: | ||
| - | ==== Structuration de template ==== | + | ===== Structuration de template ===== |
| - | === Héritage === | + | |
| - | === Blocks === | + | |
| - | === Parent === | + | |
| - | === Inclusion | + | |
| + | 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=" | ||
| + | </ | ||