Puis-je changer la CodeIgniter show_error fonction pour renvoyer un objet JSON?
Comment puis-je personnaliser (ou remplacer) show_error fonction de CodeIgniter pour retourner l'erreur json?
- Êtes-vous à l'aide des bibliothèques comme jquery, mootools ?
- Oui,j'utilise un formulaire avec ajax (jquery), et lorsque la réponse est une erreur, ils popup-moi les détails de l'erreur. Si vous avez besoin de plus de détails je peux expliquer...
Vous devez vous connecter pour publier un commentaire.
Peut-être bien que cette solution n'est pas forcément utile si vous êtes à la recherche de retour, complexe d'erreur objets comme des tableaux (bien que vous pouvez, mais vous auriez à parser json sur le client), mais ici nous allons:
Suffit d'utiliser HTTP
Pourquoi? Eh bien, vous pouvez passer un deuxième paramètre, qui se trouve être le code HTTP de la réponse, qui se trouve être cool, parce que ça permet de faire votre demande HTTP connaissent et qui fonctionne étonnamment bien avec ajax côté client le demande.
Ce que vous voulez faire est d'abord de définir ce que des erreurs peuvent se produire sur le backend, il y a une liste de codes d'erreur HTTP ici.
Codes d'erreur HTTP
Plus vous aurez de chance d'utiliser les codes d'erreur dans les 200, 400 et 500 des plages. En fait, quand vous frappez un serveur sur votre navigateur web, il devrait normalement recevoir un 200 code de réponse http qui signifie que tout s'est bien passé.
Avez-vous vu ces "Internal server eror" messages? Eh bien, ils sont 500 codes de réponse http. Et que veut dire exactement, c'était une erreur du serveur. Lequel? Cela dépend de comment vous les classer, il y a un ensemble d'erreurs sur les 500 gamme, mais si vous ne voulez pas les tracas avec qui il suffit d'utiliser un 500 code d'erreur générique de réponse.
L'autre plage est à 400. Ceux-ci sont généralement d'erreur des utilisateurs, par exemple si vous allez sur une url à l'intérieur d'un serveur, et il n'existe pas, vous obtiendrez le fameux 404 not found, 400 est un code d'erreur générique ce qui signifie que le client (dans ce cas, le navigateur) a demandé quelque chose, mais la demande n'était pas valide, dans le cas d'une 404 en particulier, que la ressource demandée n'a pas été trouvé, c'est une erreur de client parce que vous êtes censés savoir quelles ressources sont disponibles sur le serveur.
Comment le faire dans codeigniter
C'est très simple en fait. Si vous voyez le show_error() de référence sur la documentation il précise que la méthode reçoit un premier paramètre le message d'erreur, puis une seconde, facultative, qui reçoit un code d'erreur. Quel code d'erreur? Le HTTP codes nous en avons parlé avant, donc:
Envoyer un code de réponse HTTP 500 pour le client, y compris votre message.
Comment attraper en AJAX
Vu que vous êtes à l'aide de jQuery c'est ce que vous le feriez normalement:
Si vous utilisez une autre trousse, ou même de l'objet DOM directement, vous pouvez encore attraper ceux depuis qu'ils sont tout simplement Les objets XMLHttpRequest et les chances sont de votre trousse à outils a un rappel, soit une erreur HTTP de réponse ou une réponse de réussite.
Pourquoi voudrais-je m'en soucier?
Parce qu'elle suit les normes, il est plus facile à déboguer, vous déléguer ce travail à la show_error() helper qui est là pour une raison et surtout parce que tous les cool kids sont à l'utiliser.
Cool, mais attendez, je ne vois pas mon message d'erreur personnalisé nulle part!
Qui est bon, parce que quand vous attrapez la demande dans l'erreur de rappel de jquery ce que vous obtenez est le générique de description de l'erreur et le code comme "Internal server error" et 500 respectivement, cependant, vous avez encore une jolie réponse html personnalisé de votre message de débogage, de voir il suffit d'utiliser une sorte d'outil de développement pour firefox ou chrome. Par exemple, si vous utilisez google chrome, vous pouvez ouvrir les outils de développement:
Aller à l'onglet réseau et vous verrez la requête HTTP, cliquez sur son nom
Vous verrez les détails et votre message d'erreur personnalisé avec l'habitude de CI de modèle, ce fut le html retourné avec votre message à l'intérieur de la demande
Enfin, si vous souhaitez aller plus loin et de débogage exactement ce qui a été envoyé à partir de php/web serveur au client d'aller de l'option en-têtes
Avertissement: Captures d'écran n'ont pas été prises à partir d'un serveur de production 🙂
Trouvé la réponse sur google un peu plus... sur "Oliver Smith" blog.
- je ajouter cette fonction dans CI des fonctions de base en étendant CI_Exceptions avec ceci:
Tous les crédits "d'Oliver Smith".