20 avr. 2024 | Connexion

Blog

Symfony 6 : pages d'erreur custom sans bundle

Symfony 6 : pages d'erreur custom sans bundle

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

2 commentaires


raditz, le 22-02-2023 à 12:01:47

Simple, efficace, un grand merci !

citizenz, le 03-03-2023 à 19:47:42

Merci, un plaisir :)

Nb d'articles actifs : 46 | Nb de commentaires : 31 | Nb de catégories : 8 | Nb de tags : 32 | Nb total de lectures : 188 713
2024 citizenz.info • Some rights reserved GPLv3 • Version 3.3.4

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)