# 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>
```