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.