webentwicklung-frage-antwort-db.com.de

Laravel 5 Validation - Rückkehr als Json/Ajax

Ich versuche, die Werte in die Validierung zu schreiben und die Antwort als json und nicht als return view wie in der Dokumentation angegeben zurückzugeben.

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

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

Der Beitrag wird von Ajax erstellt, daher muss ich die Antwort auch im Ajax erhalten.

Ich habe herausgefunden, dass, um eine Aktualisierung der Seite in der Antwort zu verhindern, ich ihr einen Statuscode von 200 außerhalb des Arrays geben muss. Aber ich konnte nicht herausfinden, was ich den 'errors'-Teil geben sollte. Was soll ich da reinschreiben?

16
senty

Sie können $validator->messages() verwenden, das ein Array zurückgibt, das alle Informationen zum Prüfer enthält, einschließlich Fehler. Die json-Funktion übernimmt das Array und codiert es als Json-String.

if ($validator->fails()) {    
    return response()->json($validator->messages(), 200);
}
25
Peyman.H

In Laravel 5.4 kann die validate()-Methode automatisch erkennen, ob es sich bei Ihrer Anfrage um eine Anfrage AJAX handelt, und die Antwort des Validators entsprechend senden. 

Siehe die Dokumentation hier

Wenn die Validierung fehlschlägt, wird eine Umleitungsantwort generiert, die den Benutzer an seinen vorherigen Standort zurücksendet. Die Fehler werden auch zur Sitzung geflasht, sodass sie zur Anzeige verfügbar sind. Wenn es sich bei der Anforderung um eine Anforderung AJAX handelte, wird dem Benutzer eine HTTP-Antwort mit dem Statuscode 422 zurückgegeben, einschließlich einer JSON-Darstellung der Validierungsfehler.

Sie können also einfach Folgendes tun:

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

Ich benutze diesen Code für die API in meinem bestehenden Projekt.

$validator = Validator::make($request->all(), [ 
      'ride_id' => 'required',
      'rider_rating' => 'required',
  ]);

  if ($validator->fails()) {
    return response()->json($validator->errors(), 400);
  }
0
David Guetta

Benutzer, die eine benutzerdefinierte Anforderungsklasse erstellt haben, können die Methode public function response(array $errors) überschreiben und eine geänderte Antwort ohne Validator explizit zurückgeben.

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\JsonResponse;

class CustomRequest extends FormRequest
{

    public function rules()
    {
        $rules = [
            //custom rules    
        ];

        return $rules;
    }

    public function response(array $errors)
    {
        return new JsonResponse(['error' => $errors], 400);
    }
}
0
minhazur

Ich glaube, wenn Sie eine Ajax-Anfrage absenden, erhalten Sie automatisch eine JSON-Antwort.

Vielleicht wäre so etwas an Ihrem Beispiel angebracht:

$validator = \Validator::make($request->all(), $this->rules());

if ($validator->fails()) {
   return response()->json($validator->errors(), 422)
}
0
mehdi

Sie müssen nur Laravel) mitteilen, dass Sie eine JSON-Antwort erhalten möchten. Fügen Sie diesen Header Ihrer Anfrage hinzu:

'Accept: application/json'

Und Laravel gibt automatisch eine JSON-Antwort zurück

0
Gjaa