Ich möchte etwas sehr ähnliches tun dies aber in der CakePHP-Welt für AJAX-Anfragen. Im Moment mache ich das:
%Vor%Es basiert auf dies . Diese Lösung erlaubt es mir jedoch nicht, eine benutzerdefinierte Nachricht wie im Rails-Beispiel aufzunehmen, sodass ich in meiner clientseitigen Fehlerbehandlungsroutine die in der 500-Fehlerantwort enthaltene Nachricht anzeigen kann.
Wie würde ich die gleiche Funktionalität in CakePHP wie das Ruby on Rails-Beispiel implementieren?
Sie können CakeExceptions wie im Cookbook erklärt verwenden: Ссылка ABER Wenn Sie Ihre benutzerdefinierten Nachrichten verwenden möchten, habe ich keine andere Möglichkeit gefunden als debug = 1
in Ihrem Produktionsmodus zu verwenden: (
Hier ist mein Ansatz mit eingebauten Methoden:
In Ihrem Controller:
%Vor% Ändere die Fehlervorlage so, dass sie nur den Fehler ausgibt, wenn sie in AJAX-Aufrufen in /app/View/Errors/error500.ctp:
Sie können den zurückgegebenen Text dann in Ihrem AJAX analysieren. Hier sind die jQuery Teile, die ich benutze:
%Vor%Hoffe das hilft:)
Wenn jemand eine Idee hat, wie man die benutzerdefinierten Fehler im Produktionsmodus verwendet (ohne den Debug-Modus zu überschreiben) würde ich mich sehr freuen!
Wie oben erwähnt, sind Exceptions die Methode, um einen Fehler bei einer AJAX-Anfrage in CakePHP zurückzugeben. Hier ist meine Lösung, um besser zu kontrollieren, wie der Fehler aussieht. Wie oben verwende ich einen benutzerdefinierten Ausnahme-Renderer, aber keine benutzerdefinierte Ausnahme. Die Standardfehlerantwort ist ein JSON-Objekt wie folgt:
%Vor%I fast wie die Art und Weise, wie der Standard-Renderer AJAX-Fehler verarbeitet; Ich möchte es nur ein wenig optimieren:
%Vor%Dann in bootstrap.php:
%Vor%Also hier ist, wie es funktioniert:
Configure::write('detailed_exceptions', 1);
Controller::set
bereits für das neue Token in der beforeFilter-Methode von AppController aufgerufen, sodass es in $this->controller->viewVars
verfügbar ist. Es gibt wahrscheinlich Dutzende anderer Möglichkeiten, dies zu erreichen. Nun sieht Ihre Antwort so aus:
%Vor% Alle zusätzlichen Daten eines beliebigen Typs können zum Array hinzugefügt werden, das für das gleiche Ergebnis an Controller::set
übergeben wird.
Ich habe auch Probleme mit benutzerdefinierten Ausnahmen und Fehlercodes bei der Verwendung von Ajax-Anfragen (jQuery Mobile in meinem Fall). Hier ist die Lösung, die ich entwickelt habe, ohne den Debug-Modus zu überschreiben. Es wirft benutzerdefinierte Fehler im Entwicklungsmodus und optional im Produktionsmodus. Ich hoffe es hilft jemandem:
AppExceptionRenderer.php:
%Vor% Sie können Configure::read('debug') > 0
weglassen, wenn Sie die Ausnahme im Debug-Modus anzeigen möchten. Die Ansicht errorjson.ctp befindet sich in 'Error / errorjson.ctp':
In diesem Fall heißt meine Ausnahme
TestException
und ist wie folgt definiert:
%Vor% Wo ich einen benutzerdefinierten Fehlercode 2, $code = 2
, für meine JSON-Antwort habe. Die Ajax-Antwort wird einen Fehler 500 mit folgenden JSON-Daten auslösen:
Natürlich müssen Sie auch die Ausnahme von Ihrem Controller werfen:
%Vor%und fügen Sie den Ausnahme-Renderer Ссылка
Dies ist vielleicht etwas außerhalb des Gültigkeitsbereichs, aber um die Ajax-Fehlerantwort in JQuery zu behandeln, verwende ich:
%Vor%Tags und Links php ajax error-handling cakephp