Personnalisation avancé des pages d’erreurs, Symfony 2

La documentation de Symfony 2 est assez claire sur la personnalisation des pages d’erreur avec Twig : http://symfony.com/doc/current/cookbook/controller/error_pages.html

Le petit apport que je voudrais faire par rapport à la documentation concerne l’affichage de la page de débogage original de Symfony.

Il serait bien que les nouvelles pages d’erreurs aient deux comportements en fonction de l’environnement d’exécution de l’application.
Un pour l’environnement de production (Votre template à vous), et un autre pour l’environnement de développement. Dans ce second cas, on aimerais avoir la page de débug original de Symfony, qui sera bien plus explicite que la page d’erreur que l’on réserve à nos futurs utilisateurs.

Pour palier à cela, il suffit d’ajouter ce code dans votre template twig.

{% if  app.environment == 'dev' %}
{% render 'TwigBundle:Exception:show' with{'exception':exception, 'logger':logger, 'format':format} %}
 {% else %}
ICI Votre template d'erreur personalisé
{% endif %}

En gros, si vous êtes en environnement de développement, c’est la page de débug original qui est utilisé et non celle que vous avez définit.

Tagués avec : , ,
Publié dans PHP, Symfony2
6 commentaires pour “Personnalisation avancé des pages d’erreurs, Symfony 2
  1. Amélie dit :

    Bonjour,
    j’ai actuellement un souci avec Symfony2 et TWig.
    j’ai intégré un système de formulaire avec des champs obligatoires, qui sont « required ».
    Sous Chrome et Firefox, quand je valide le formulaire alors que les champs ne sont pas remplis, j’ai un rappel à l’ordre sous forme d’infobulle.
    Sous IE, le formulaire part, et bien sûr j’ai une erreur car les champs requis sont vides.
    Auriez-vous unes piste SVP ?
    En vous souhaitant bonne journée …

    • waldo2188 dit :

      @Amélie, pour éviter que IE valide ton formulaire directement utilise une routine de vérification de ton formulaire en JavaScript.
      Par contre, il faut quand même que tu vérifie côté serveur si ton formulaire est valide. Il ne faut jamais faire confiance aux données qui te proviennent d’un formulaire.

    • Diabgate dit :

      Bonjour Amelie
      il va te falloir simplement ajouter la ligne suivante
      ‘required’ => false,// Rend le champ facultatif
      dans ta description du champ au niveau du formulaire
      ainsi tu pourra avoir

       
      $builder->add('nomsite', 'entity', array( 
                     'label' => 'Service:',  
                     'class' => 'CnceAnnuaireBundle:Site', 
                     'property' => 'nomsite',
                     'required' => false,// Rend le champ facultatif
                     'empty_value' => 'Dans tous les services',
                  ));
      
    • dam dit :

      Ce qui a été dit au dessus est faux.

      Les info bulles gérées par FF et chrome sont des validations HTML5 supportées par ces nav et peut être IE8 (je n’utilise pas IE)
      Ce que je te conseille de faire c’est de rajouter ‘novalidate’ dans ta balise form cela désactivera la validation côté client. En revanche spécifie bien dans ton formulaire toutes tes contraintes, ainsi tu auras une validation faite par toi côté serveur qui est bien plus secure.

      Autre avantage de désactiver la validation html5, tu gères toi même le design de tes messages d’erreur. Si l’aspect de ton site est important tu seras contente de ne pas avoir des info bulles dans un style différent sous FF, chrome, windows, mac … et des messages d’erreur SF encore une fois différent.

  2. dam dit :

    Quel est le but de ce billet étant donné que le fonctionnement de base de symfony fait ce qui est décrit ici ?

    en prod > page d’erreur de prod (ex : error500.html.twig, error404.html.twig)
    en dev > la page d’erreur de Sf avec la stack trace

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*