# Symfony - Twig ###### tags: `Symfony` `gobelins` # Exercice 1 Modifier le fichier `base.html.twig` pour définir une architecture de page (header, main, aside, footer...), prévoir un block qui permettra d'afficher le contenu d'une page. ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>{% block title %}Welcome!{% endblock %}</title> {% block stylesheets %} <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet"> {% endblock %} </head> <body> {% block body %}{% endblock %} {% block javascripts %}{% endblock %} </body> </html> ``` * Définir un nouveau template qui hérite de votre fichier : `base.html.twig` * Ajouter dans le nouveau template le chargement d'une feuille de style en conservant l'appel au CDN spécifié dans `base.html.twig` ### :arrow_forward: Réponse twig : ```twig {{ app.request.locale }} {{ app.request.query.get('search') }} ``` # Exercice 2 1. Afficher dans un template la locale courante utilisée 2. Récupérer dans un template les paramètres envoyés dans l'url `?search=blabla&page2` # Exercice 3 1. Ajouter dans une action d'un Controller un message flash `$this->addFlash('error', 'form.comment.content_not_blank')` 2. Créer une macro twig permettant d'afficher les messages flash ### :arrow_forward: Réponse utils.html : ``` {% macro flash(array) %} {% for label, messages in array %} {% for message in messages %} <div class="alert alert-{{ label }}"> {{ message }} </div> {% endfor %} {% endfor %} {% endmacro %} ``` test.html.twig : ```twig {% import "utils.html" as utils %} {{ utils.flash(app.flashes) }} ``` # Exercice 4 ```html <article> <time datetime="{{ 'now'|date('Y-m-d') }}"></time> </article> ``` Comment est-il possible de paramétrer le format de date afin de modifier le format à un seul endroit si nécessaire ? > Attention, le format doit pouvoir être modifié par l'intermédiaire d'un fichier de configuration de votre application ### :arrow_forward: Réponse twig.yaml : ```php globals: date_format: "%date_format%" ``` services.yaml : ```php parameters: date_format: 'Y-m-d' ``` use : ```html <article> <time datetime="{{ 'now'|date(date_format) }}"></time> </article> ``` # Exercice 5 1. Créer un "service" permettant de générer un identifiant unique : `uniqid` 2. Créer une extension twig afin d'utiliser votre service via une fonction twig : ```html <div id="{{ uuid() }}"></div> ```