2017-01-17 6 views
1

Ich erstelle eine einfache API zum Hochladen von Dateien aus der mobilen App.API - Validierung Anfrage in Laravel

In meiner routes/api.php Datei habe ich eine Route definiert:

Route::post("/file", '[email protected]'); 

dann in meinem Controller validieren ich die Anfrage:

public function upload(Request $request){ 

    $this->validate($request, [ 
      'name' => 'required', 
      'file' => 'file', 
      'type' => 'required|in:sign,photo', 
     ]); 

    // do something here.... 

} 

Wenn die Anforderung korrekt ist (es geht die Validierung) alles funktioniert Fein und Laravel gibt die JSON-Antwort zurück.

Aber wenn die Anfrage die Validierung nicht besteht, d. H. Das Feld name fehlt, gibt Laravel 302 Seite zurück und versucht, mich zur Anmeldeseite umzuleiten.

Wie kann ich einen ordnungsgemäßen 40X/50X-Fehler mit JSON-Nachricht zurückgeben, wenn die Validierung fehlschlägt, statt 302 Redirect-Seite?

Ich benutze Laravel 5.3 und Insomnia zum Testen der API-Aufrufe.

Antwort

3

Die Methode validate gibt eine Umleitung für normale Anfragen und JSON für eine AJAX-Anfrage zurück.

Die Validierungsmethode akzeptiert eine eingehende HTTP-Anforderung und eine Reihe von Validierungsregeln. Wenn die Validierungsregeln bestanden werden, wird der Code normal weiter ausgeführt. Wenn jedoch die Validierung fehlschlägt, wird eine Ausnahme ausgelöst und die entsprechende Fehlerreaktion wird automatisch an den Benutzer gesendet. Im Falle einer herkömmlichen HTTP-Anfrage wird eine Weiterleitungsantwort generiert, während eine JSON-Antwort für AJAX-Anfragen gesendet wird.

So haben Sie mehrere Möglichkeiten, hier sind ein paar:

  • Sie die X-Requested-With Header festlegen können so Laravel denkt, es ist ein AJAX-Request
  • Sie Ihren Validator erstellen und fails() auf nennen und behandeln Ihre Antwort so, wie Sie wollen:

$validator = Validator::make($input, $rules); 
if ($validator->fails()) { 
    // Custom Response 
} 

Wenn Sie nur eine API erstellen, sollten Sie stattdessen die Verwendung von Lumen in Erwägung ziehen, da sie für diesen speziellen Zweck genauer abgestimmt ist. Darüber hinaus ist es die Validierung defaults to returning a JSON response.

+2

Danke, X-Requested-With hat den Trick gemacht. Trotzdem ist es ein bisschen komisch, dass eine Anfrage von Insomnia nicht korrekt als AJAX-Anfrage erkannt wird. – Gacek

Verwandte Themen