web-dev-qa-db-de.com

Erhalten Sie eine Fehlermeldung von Laravel Validierung

Ich verwende den eingebauten Validator Laravel und möchte die erste Fehlermeldung erhalten

if ($validator->fails()) {
     $error = $validator->messages()->toJson();
     .....
}

Dies ist das Ergebnis, wenn ich einen Fehler drucke

{"name":["The name must be at least 5 characters."],"alamat":["The address must be at least 5 characters."]}

Im obigen Beispiel möchte ich den ersten Fehler erhalten, der lautet: "Der Name muss mindestens 5 Zeichen haben." Wie kann ich das machen?

5
ZZZ

Versuche dies: 

if ($validator->fails()) {
   $error = $validator->errors()->first();
}
10
rome 웃

Wenn Sie in Ihrer Ajax-Anforderung data abrufen, versuchen Sie data.name

Dadurch erhalten Sie die Fehlermeldung für das Feld name

$.ajax({
        url: "/your-save-url",
        type: "post",
        data: serializedData,
        success: function(data) { alert(data.name)}
    });
1
Jilson Thomas

Wenn die Validierung fehlschlägt, kann die withErrors-Methode verwendet werden, um die Fehlernachrichten an die Sitzung zu senden. Dies ist ein Array, und diese Methode teilt $errors nach der Umleitung automatisch mit allen Ansichten gemeinsam.

return redirect('register')->withErrors($validator, 'login');

Auf die Variable MessageBag kann mit der Instanz aus der Variablen $errors zugegriffen werden:

{{ $errors->login->first('email') }}

Formular-API docs

Hoffe das ist hilfreich.

1
ArtisanBay

Ab 2019 Laravel 5.8 ist es so einfach:

// create the validator and make a validation here...
if ($validator->fails()) {
    $fieldsWithErrorMessagesArray = $validator->messages()->get('*');
}

Sie erhalten ein Array mit Feldernamen und Fehlermeldungen. Etwas wie das:

[
    'price'=>
        [ 
            0 => 'Price must be integer',
            1 => 'Price must be greater than 0'
        ]
    'password' => [
        [
            0 => 'Password is required'
        ]
    ]

]

Sie können andere Validierungsnachrichten verwenden, die von der Klasse Illuminate\Support\MessageBag Bereitgestellt werden (es ist tatsächlich der Objekttyp, den $validator->messages() oben zurückgibt).

Gehen Sie zu your_laravel_project_dir/vendor/illuminate/support/MessageBag.php Und finden Sie einige nützliche Methoden wie keys, has, hasAny, first, all, isEmpty usw., die Sie möglicherweise benötigen, wenn Sie nach bestimmten Überprüfungsfehlern suchen und HTTP-Antwortnachrichten anpassen.

Es ist leicht zu verstehen, was sie tun, wenn man sich den Quellcode ansieht. Hier ist die Laravel 5.8 API-Referenz obwohl wahrscheinlich weniger nützlich als der Quellcode.

1
bob-12345