Wenn ich die Feldnamen als Schlüssel haben möchte, muss ich $rules iterieren, aber selbst wenn ich keine Feldnamen als Schlüssel verwende, muss ich Fehlermeldungen iterieren, um $verrors zu konstruieren.
Wie könnte ich konvertieren $v->messages() zum Äquivalent von $verrors ohne iterieren zu müssen? Seit Response::json() erwartet ein Array anstelle eines Objekts.
DerLola
Der einfachste Weg ist die Nutzung der MessageBag Objekt des Validators. Dies kann folgendermaßen erfolgen:
// Setup the validator
$rules = array('username' => 'required|email', 'password' => 'required');
$validator = Validator::make(Input::all(), $rules);
// Validate the input and return correct response
if ($validator->fails())
{
return Response::json(array(
'success' => false,
'errors' => $validator->getMessageBag()->toArray()
), 400); // 400 being the HTTP code for an invalid request.
}
return Response::json(array('success' => true), 200);
Dies würde Ihnen eine JSON-Antwort wie diese geben:
{
"success": false,
"errors": {
"username": [
"The username field is required."
],
"password": [
"The password field is required."
]
}
}
Dies mag ein dummer Kommentar sein – aber bedeutet das Setzen des http-Codes auf 400 nicht, dass die JSON-Antwort vollständig ignoriert wird?
– Bohnen
7. November 2013 um 21:03 Uhr
Hängt vom „Client“ ab, der den JSON liest. jQuery zum Beispiel handhabt dies perfekt. Es löst nicht den Erfolg aus, sondern den Fehler-Callback, was Sie wollen.
– DerLola
8. November 2013 um 12:29 Uhr
Wenn Sie jQuery verwenden, können Sie mit diesem Code in der Ajax-Anforderung Fehler erhalten: error: function(xhr, status, data){ console.log(xhr.responseJSON.errors); }
– Jako
10. Februar 2015 um 9:24 Uhr
Vielen Dank. Wissen Sie, wie Sie die Antwort ändern können, um anstelle eines Arrays eine Zeichenfolge pro Feld zurückzugeben? Ich habe versucht, mehrere Fehlerzeichenfolgen in einem Feld zu erhalten, aber es scheint nicht möglich zu sein.
– JCarlosR
17. August 2016 um 18:37 Uhr
@JCarlos Der Nachrichtenbeutel gruppiert sie in einem Array. Sie könnten die Elemente wie folgt zuordnen: 'errors' => array_map(function($fieldErrors) { return $fieldErrors[0]; }, $validator->getMessageBag()->toArray())
– DerLola
18. August 2016 um 8:41 Uhr
Versuchen Sie in der Ajax-Antwort so etwas wie
.fail(function( data ) {
var response = JSON.parse(data.responseText);
var errorString = '<ul>';
$.each( response.errors, function( key, value) {
errorString += '<li>' + value + '</li>';
});
errorString += '</ul>';
Laravel 5 gibt automatisch einen Validierungsfehler zurück
Dafür müssen Sie nur Folgendes tun,
Regler:
public function methodName(Request $request)
{
$this->validate($request,[
'field-to-validate' => 'required'
]);
// if it's correctly validated then do the stuff here
return new JsonResponse(['data'=>$youCanPassAnything],200);
}
Sie können für jeden bauen validation Feld eins <span> Tag mit id als Feldname und Suffix _error Daher wird ein Validierungsfehler mit der obigen Logik wie folgt angezeigt:
<span id="field_error"></span>
Ich hoffe es hilft 🙂
aber wenn ich zum Beispiel einen Fehler korrigiere und erneut klicke, wie kann ich dann diese spezifische Meldung entfernen, die ein Fehler war und jetzt korrigiert wird?
– Marco Bozzola
17. Juli 2020 um 13:02 Uhr
@MarcoBozzola Sie müssen alle Nachrichten entfernen und Nachrichten erneut aus der Antwort setzen, wenn dies fehlschlägt, ansonsten alles gut.