2010-08-17 5 views
0

Je suis nouveau à Symfony et j'ai du mal à trouver une solution élégante pour gérer les erreurs.Gestion des erreurs symfony sans cadre de formulaire

Je sais que je peux lancer des exceptions et créer mes propres classes d'exceptions, mais c'est comment afficher l'erreur à l'utilisateur de la meilleure façon possible. Par exemple, j'ai une classe Card qui facture des cartes de crédit et de débit, il y a une variété de différents problèmes qui peuvent survenir. Donc, si je devais faire des exceptions pour les différents problèmes, ou utiliser une classe CardException générique, mais où devrais-je enregistrer les messages d'erreur, il n'est pas bon de coder les messages d'erreur dans la classe de carte elle-même.

Et puis comment les afficher à l'utilisateur. Je pourrais le faire mais j'ai l'impression que ça va être une solution désordonnée et je suis à la recherche de la bonne pratique, symfony.

Des idées? Ou dois-je utiliser le cadre de formulaire, je suis déjà pour accepter les détails de la carte de l'utilisateur, mais comment afficher une erreur liée à un appel de service Web et pas un problème avec les informations qu'ils ont soumis.

Répondre

0

Vous pouvez toujours utiliser les messages flash pour les erreurs qui ne font pas partie de la validation.

$this->getUser()->setFlash('error', 'An error occurred while your transaction took place please try again later.'); 
+0

pour que cela fonctionne je n'aurai pas besoin de rediriger l'utilisateur? si je fais cela, il peut être difficile de conserver les valeurs du formulaire – McVeg

+0

Non, vous n'avez pas besoin d'avoir une zone sur la page où vous affichez le flash. Mais généralement, il est préférable de faire une redirection après un message, sauf si c'est une erreur. – mhitza

0

Il répond qu'une partie de votre question, (je vais juste parler des erreurs Ajax), mais ce que je fais est d'avoir un div quelque part sur la page appelée « error_area », et une fonction JavaScript appelée displayAjaxError qui ajoute le message à cette div.