Développement web
Symfony
PHP
Twig
HTML
il y a 2 ans citizenz7 2 commentaires 4497 lectures
Et j'y suis parvenu. L'idée est de créer un controller, un template et de dire à Symfony de manière hyper simple, quel controller s'occupe des erreurs.
Allons-y.
Créons premièrement un controler src/Controller/ErrorController.php
Il s'agit ici d'un controller hyper basique qui oriente sur un template
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class ErrorController extends AbstractController
{
#[Route('/error', name: 'app_error')]
public function show(): Response
{
return $this->render('error/index.html.twig', [
'controller_name' => 'ErrorController',
]);
}
}
Le template en question : templates/error/index.html.twig
Ici, j'ai adapté le template à mon site (HTML, CSS) et je teste si on est sur une erreur 403, 404, 500 ou n'importe quoi d'autre.
A vous d'adapter le texte, etc.
{% extends 'base.html.twig' %}
{% block title %}Erreur{% endblock %}
{% block body %}
<main id="main">
<section class="single-post-content">
<div class="container">
<div class="row">
<div class="col mt-4 alert-danger py-5 px-3 text-center">
{% if app.request.attributes.get('exception').statusCode == '404' %}
<h1 class="display-2 fw-bold">ERREUR 404</h1>
<h5>La page que vous recherchez n'existe pas... ou plus !</h5>
{% elseif app.request.attributes.get('exception').statusCode == '403' %}
<h1 class="display-2 fw-bold">ERREUR 403</h1>
<h5>Vous ne pouvez pas afficher cette page ou cette section !</h5>
{% elseif app.request.attributes.get('exception').statusCode == '500' %}
<h1 class="display-2 fw-bold">ERREUR 500</h1>
<h5>Oups !?! Alors là, on a un problème... La page ou la section ne s'affiche pas. Si vous avez 2
minutes, merci de prévenir l'administrateur du site.</h5>
{% else %}
<h5>Oups !?! Désolé, il y a une erreur. Si vous avez 2
minutes, merci de prévenir l'administrateur du site ou d'envoyer un message depuis la page <a href="{{ path('app_contact') }}">contact</a>.</h5>
{% endif %}
</div>
<div class="mt-3 text-center">
<a class="btn btn-primary p-3 lead" href="{{ path('app_home') }}">Page d'accueil</a>
</div>
</div>
</div>
</section>
</main>
{% endblock %}
Enfin, il suffit de dire à Symfony quel est le controller qui se charge des erreurs. Et ça se passe dans config/packages/framework.yaml
framework:
error_controller: App\Controller\ErrorController::show
Et zou ! A vous de jouer ;)
Simple, efficace, un grand merci !
Merci, un plaisir :)
Blog d'un geek quinqua nivernais fan d'ovalie, de linuxerie, de musique et de Net
@Kilenge22 De rien ;)...
citizenz
19-08-2024
Salut et merci vraiment ...
Kilenge22
18-08-2024
@Denny, c'est à dire ?...
citizenz
10-08-2024
En plus je connais une technique pour tuer trois hommes en un coup rien qu’avec des feuilles mortes ! Alors là, vous êtes deux, vous avez bien de la chance. (Kaamelott, Livre IV, Les Chaperons)