2016-08-05 8 views
3

入力配列(または少なくともインデックス)から失敗した要素を取得することは可能ですか?Laravel - Validatorから無効な要素を取得

例:

$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... 

} 

理由は、私がテーブルに無効なデータを挿入したいということですので、後にこれらのエントリを修正することが可能である...

答えて

2

あなたは上invalid()を呼び出すことができますバリデーターは失敗したデータを取得します。

$failed = $validator->invalid(); 

enter image description here

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

+0

を試してみてください。このメソッドは、間違ったデータがある場合でも、空の配列を返します。ここではlaravel 5.2を使用しています – CarlosCarucce

+0

これは奇妙です。 Validator.phpファイルをチェックアウトし、そこにあるものを試すことができるかどうかを確認します。 –

+0

はい、そこにあります。 – CarlosCarucce

0

私はここにいくつかのテストをした。この

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

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

これはすべてのフォームデータを表示するだけです。 OPは失敗したアイテムのみを必要とします。 –

+0

このリンクを確認してくださいhttps://ericlbarnes.com/2015/04/04/laravel-array-validation/ – Parithiban

+0

いいえ、あなたはそれを取得していません。 **すべてのアイテムを印刷するだけでなく、** FAIL **検証が必要なアイテムが必要です**検証が失敗したとき。 –

関連する問題