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

Schreibe einen Kommentar