2016-08-05 15 views
3

Ist es möglich, die fehlerhaften Elemente aus dem Eingabe-Array (oder Indizes mindestens) zu bekommen?Laravel - Erhalte ungültige Elemente vom Validator

Beispiel:

$data = [ 
    ['name' => 'John', 'age' => 30], 
    ['name' => 'Robert', 'age' => 'nope'], 
    ['name' => ['woops'], 'age' => 10] 
]; 

$validator = \Validator::make($data, [ 
    '*.name' => 'required|string|max:200', 
    '*.age' => 'required|int' 
]); 

if(!$validator->passes()){ 

    /* 
     Get all the failed elements. 
     In this case: 
     [ 
      ['name' => 'Robert', 'age' => 'nope'], 
      ['name' => ['woops'], 'age' => 10] 
     ] 
    */ 
    $fails = $validator->getFailElements(); 

    // OR 

    /* 
     Get failed indexes: 
     [1,2] 
    */ 
    $indexes = $validator->getFailIndexes(); 

    //Proceed... 

} 

Der Grund ist, dass ich ungültige Daten in einer Tabelle einfügen möchte, so dass es möglich ist, später die Einträge zu reparieren ...

Antwort

2

Sie können auch anrufen invalid() auf der Validator, um die fehlerhaften Daten zu erhalten.

$failed = $validator->invalid(); 

enter image description here

Referenz: https://github.com/illuminate/validation/blob/master/Validator.php#L544

+0

ich hier einige Tests gemacht. Die Methode gibt ein leeres Array zurück, auch wenn falsche Daten vorhanden sind. Mit Laravel 5.2 hier – CarlosCarucce

+0

Das ist seltsam. Überprüfen Sie die Validator.php-Datei und sehen Sie, ob Sie mit dem, was drin ist, experimentieren können. –

+0

Ja, es ist da. Ich dachte, es wäre etwas mit den Regeln zuerst, aber sie scheinen in Ordnung zu sein (mit dem gleichen wie hier) – CarlosCarucce

0

Try This

$validator = \Validator::make($data, [ 
    '*.name' => 'required|string|max:200', 
    '*.age' => 'required|int' 
]); 

if ($validator->fails()) { 
    dd($request->all()); 
    //do your code 
} 
+1

Das wird nur alle Formulardaten anzeigen. Das OP möchte nur die fehlerhaften Elemente. –

+0

überprüfen Sie für diesen Link https://ericlbarnes.com/2015/04/04/laravel-array-validation/ – Parithiban

+0

Nein, Sie bekommen es nicht. Er möchte die Items, die ** FAIL ** Validierung, nicht nur alle Artikel drucken ** WENN ** Validierung fehlschlägt. –