25/03/2023

0. Citation du jour

Lu 481 fois Licence Creative Commons

On souhaite afficher une "citation du jour" dans le footer du site, provenant d'une API.

Service

Créer une classe App\CitationDuJour\CitationService avec une méthode publique qui se contentera de retourner une chaîne statique pour la citation et son auteur:

<?php

namespace App\CitationDuJour;

class CitationService
{
    public function getCitation(): string
    {
        return 'citation';
    }

    public function getAuteurCitation(): string
    {
        return 'auteur';
    }
}

Extension Twig

Pour afficher la citation dans un footer et par conséquent sur toutes les pages, cette fois nous n'utiliserons pas de controlleur mais une extension Twig dans laquelle nous allons déclarer une fonction utilisable dans nos templates.
Créer la classe App\Twig\CitationExtension:

<?php

namespace App\Twig;

use App\CitationDuJour\CitationService;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;

class CitationExtension extends AbstractExtension
{
    public function __construct(
        private readonly CitationService $citationService,
    ) {
    }

    public function getFunctions()
    {
        return [
            new TwigFunction('citation', $this->citationService->getCitation(...)),
            new TwigFunction('auteurCitation', $this->citationService->getAuteurCitation(...)),
        ];
    }
}

Footer

Dans /templates/_template.html.twig, ajouter un footer après le bloc content:

{# ... #}
{% block content '' %}

<footer class="footer">
	<div class="content has-text-centered">
		<p><em>"{{ citation() }}"</em> - {{ auteurCitation() }}</p>
	</div>
</footer>

Vous devriez voir votre citation statique en bas de chaque page.