Développement web
Symfony
PHP
Twig
HTML
il y a 1 an citizenz7 2 commentaires 3751 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
Super, j'ai galéré 3 heures et je tombe sur votre tuto! ...
Aude
17-03-2024
@houdih De rien ;)...
citizenz7
24-02-2024
Ça fonctionne parfaitement, t'es un chef !! Mercii !!...
houdih
28-01-2024
Donc, pour résumer, je suis souvent victime des colibris, sous-entendu des types qu’oublient toujours tout. Euh, non… Bref, tout ça pour dire, que je voudrais bien qu’on me considère en tant que Tel. (Perceval, Kaamelott, Livre I, Tel un chevalier)