---
# System prepended metadata

title: Symfony - Twig
tags: [Symfony, gobelins]

---

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

