Wie die Rückkehr der AJAX-Fehler aus einer Laravel-controller?
Baue ich noch eine REST-API mit Laravel 5.
In Laravel 5, Sie können eine Unterklasse App\Http\Requests\Request
zu definieren, die die Validierungsregeln, die erfüllt sein müssen, bevor eine route bearbeitet werden. Zum Beispiel:
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class BookStoreRequest extends Request {
public function authorize() {
return true;
}
public function rules() {
return [
'title' => 'required',
'author_id' => 'required'
];
}
}
Wenn ein client lädt die entsprechende route über einen AJAX-request, und die BookStoreRequest
feststellt, dass die Anforderung nicht erfüllt die Regeln, wird es automatisch wieder den Fehler(s) als JSON-Objekt. Zum Beispiel:
{
"title": [
"The title field is required."
]
}
Jedoch die Request::rules()
Methode kann nur Validierung der input—und auch wenn die Eingabe gültig ist, andere Arten von Fehlern, die auftreten könnten nach der Anfrage bereits angenommen und übergeben an den controller. Zum Beispiel, sagen wir mal, dass der controller benötigt zum schreiben der neuen Buch die Informationen in eine Datei aus irgendeinem Grund—aber die Datei kann nicht geöffnet werden:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Http\Requests\BookCreateRequest;
class BookController extends Controller {
public function store( BookStoreRequest $request ) {
$file = fopen( '/path/to/some/file.txt', 'a' );
//test to make sure we got a good file handle
if ( false === $file ) {
//HOW CAN I RETURN AN ERROR FROM HERE?
}
fwrite( $file, 'book info goes here' );
fclose( $file );
//inform the browser of success
return response()->json( true );
}
}
Natürlich könnte ich einfach die()
aber das ist super hässlich. Ich würde lieber zurück, mein Fehler-Nachricht im selben format wie die Validierung Fehler. Wie diese:
{
"myErrorKey": [
"A filesystem error occurred on the server. Please contact your administrator."
]
}
Konnte ich konstruiere meine eigene JSON-Objekts und Rückgabe,—aber sicher Laravel unterstützt das nativ.
Was ist die beste /sauberste Weg, dies zu tun? Oder gibt es einen besseren Weg, um zurückzukehren-Laufzeit (im Gegensatz zu validieren-Zeit) Fehler, die aus einer Laravel REST API?
InformationsquelleAutor der Frage greenie2600 | 2016-02-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie stellen Sie den status-code in Ihre json-Antwort wie folgt:
Oder nur durch die Verwendung der Helfer-Funktion:
InformationsquelleAutor der Antwort Jilson Thomas
Können Sie es in vielerlei Hinsicht tun.
Ersten, können Sie die einfache
response()->json()
indem Sie einen status-code:Oder, in einer komplexen Weise, um sicherzustellen, dass jeder Fehler einer json-Antwort, die Sie einrichten können eine exception-handler zu fangen, eine Besondere Ausnahme und json zurückgeben.
Öffnen
App\Exceptions\Handler
die folgenden Schritte aus:Dies wird wieder eine json-für jede Ausnahme in der Anwendung.
Nun erstellen wir
MyCustomException
zum Beispiel in app/Ausnahmen:Können wir jetzt einfach verwenden
MyCustomException
oder-ohne Ausnahme-auszudehnenMyCustomException
Rückgabe eines json Fehler.Nun nicht nur Ausnahmen, die über
MyCustomException
wird wieder eine json-Fehler, aber auch jede andere exception geworfen, im Allgemeinen.InformationsquelleAutor der Antwort Blue Genie