CitizenZ Accueil Blog A propos Contact Connexion
Retour à la liste des articles Symfony 6 : pages d'erreur custom sans bundle

Symfony 6 : pages d'erreur custom sans bundle

Olivier Prieur | il y a 2 ans | il y a 26 jours Développement web | 2 | 4926

J'ai dernièrement voulu mettre en place des pages d'erreur personnalisées sous Symfony 6.1. En suivant la documentation de Symfony (https://symfony.com/doc/current/controller/error_pages.html), je n'ai jamais réussi à faire fronctionner les pages d'erreur. J'avais constamment une page blanche pour une erreur 404 par exemple... J'ai alors regardé s'il était possible de se passer du traditionnel templates/bundles/TwigBundle/Exception...

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 ;)

Olivier Prieur

Olivier Prieur

Geek quinqua nivernais fan d'ovalie, de musique, de linuxeries et de Net.
Portfolio : https://www.olivierprieur.fr

Commentaires

En soumettant ce formulaire, j’accepte que ce site conserve mes données personnelles via ce formulaire. Aucune exploitation commerciale ne sera faite des données conservées.

raditz

il y a 2 ans

Simple, efficace, un grand merci !

citizenz7

il y a 2 ans

Merci, un plaisir :)

A la une

Quelle distribution Linux ? Pour qui ? Pour quoi ?

Lire l'article

Utiliser TailwindCSS dans un projet Symfony 7

Lire l'article

Symfony 7 avec Docker

Lire l'article

Les plus lus

Symfony : barre de recherche dans la sidebar 19584

Lire l'article

Débuter avec Symfony 5 : le fichier .env 12028

Lire l'article

VSCode : 10 raccourcis clavier indispensables (Linux) 11797

Lire l'article

GIT / GITHUB : aide-mémoire pour "les nuls" 10271

Lire l'article

Les plus likés

Quelle distribution Linux ? Pour qui ? Pour quoi ?

2 Lire l'article

Symfony 7 avec Docker

1 Lire l'article

Customiser Easyadmin (2) : avec AssetMapper

1 Lire l'article