2015-09-13 19 views
12

Ich versuche, die Werte in die Validierung zu posten und die Antwort als JSON anstelle von return view wie in der Dokumentation angegeben zurückgeben.Laravel 5 Validierung - Rückgabe als JSON/AJAX

$validator = Validator::make($request->all(), [ 
     'about' => 'min:1' 
    ]); 

    if ($validator->fails()) { 
     return response()->json(['errors' => ?, 'status' => 400], 200); 
    } 

Der Beitrag wird von Ajax gemacht, damit ich die Antwort in der Ajax als auch empfangen müssen.

Ich fand heraus, dass, um die Aktualisierung der Seite in der Antwort zu verhindern, ich einen Statuscode von 200 außerhalb des Arrays geben muss. Aber ich konnte nicht herausfinden, was ich dem 'errors' Teil geben soll. Was soll ich da drin schreiben?

+1

'return response() -> json ([ 'Fehler' => $ validator-> Nachrichten(), 'Status' => 400] , 200); '? – aldrin27

+2

Kleines Update: REST-Prinzipien erfordern heutzutage den Statuscode '422'. – Peon

Antwort

18

Sie können $validator->messages() verwenden, die ein Array zurückgibt, das alle Informationen zum Validator enthält, einschließlich Fehlern. Die json-Funktion nimmt das Array und codiert es als eine JSON-Zeichenfolge.

if ($validator->fails()) {  
    return response()->json($validator->messages(), 200); 
} 
+0

Sie müssen den Fehlercode 200 nicht angeben, da 200 der Standardwert ist. –

+0

Mmm. Ich denke, wir sollten Status-Code ein anderes als 200, 201 setzen. Was passiert, wenn clientseitige "Axios" (Javascript-API-Bibliothek) nach Versprechen verwenden: D – dphans

+1

Wenn es fehlgeschlagen ist, sollten Sie eine '400' zurückgeben, da es getan hat nicht bestanden. Sie sollten auch in Betracht ziehen, die Antwortcode-Konstanten zu verwenden, z. B. "Response :: HTTP_BAD_REQUEST". Ein vollständiges Beispiel wäre: 'return response() -> json ($ validator-> messages(), Antwort :: HTTP_BAD_REQUEST);' –

1

In Laravel 5.4 die validate() Methode kann automatisch erkennen, ob Ihre Anfrage eine AJAX-Anforderung ist, und dementsprechend den Validator Antwort senden.

Lesen Sie die Dokumentation here

Wenn die Validierung fehlschlägt, wird eine Umleitungsantwort erzeugt werden, um den Benutzer zurück zu ihrem bisherigen Standort zu senden. Die Fehler werden ebenfalls in der Sitzung angezeigt, damit sie für die Anzeige verfügbar sind. Wenn die Anforderung eine AJAX-Anforderung war, wird eine HTTP-Antwort mit einem 422-Statuscode an den Benutzer zurückgegeben, einschließlich einer JSON-Darstellung der Validierungsfehler.

So können Sie einfach wie folgt vor:

Validator::make($request->all(), [ 
    'about' => 'min:1' 
])->validate();