2017-05-16 12 views
0

2つの基準を満たしている場合のみ、必要に応じて配列内のフィールドを検証するにはどうすればよいですか?Laravel 5.4検証 - 配列内の2つのフィールドに基づいて配列内での検証が必要

私は、以下のサンプルデータを持っている、と私はcandidate_typeが2または3とis_present_companyがゼロである場合にのみエンドフィールドを検証します。

Array 
(
    [candidate_type] => 3, 
    [experience] => Array(
     [0] => Array(
      [job_title] => 'test title' 
      [company] => 'test company' 
      [start] => 'test start' 
      [end] => 'test end' 
      [is_present_company] => 1 
      [location_country] => 
     ) 
    ) 
) 

これは私のLaravelはコード検証です:この問題に対処するために

return Validator::make($data, [ 
    'experience.*.job_title' => 'required_if:candidate_type,1,2', 
    'experience.*.company' => 'required_if:candidate_type,1,2', 
    'experience.*.start' => 'required_if:candidate_type,1,2|date', 
    'experience.*.end' => 'required_if:candidate_type,1,2|date', 
    'experience.*.location_country' => 'required_if:candidate_type,1,2', 
]); 

を、私は別に代わりに配列フィールドを検証しました。

$hasExperienceError = false; 
if (!empty($data['candidate_type']) && in_array($data['candidate_type'], [1, 2])) { 
    if (empty($data['experience']) || count($data['experience']) < 1) { 
    // $validator->errors()->add('experience', 'Please provide at least one experience'); 
    } else { 

    foreach($data['experience'] as $key => $z) { 

     $xv = Validator::make($z, [ 
     'job_title' => 'required', 
     'company' => 'required', 
     'start' => 'required|date', 
     'end' => 'required_if:is_present_company,1|date', 
     'location_country' => 'required', 
     ]); 
     if ($xv->fails()) { 
     $hasExperienceError = true; 
     } 
    } 
    } 
} 

答えて

0

必要条件が内部にある場合、配列の検証はできません。配列の外側で必要なフィールドを抽出し、それを配列の必須条件として使用する必要があります。

+0

こんにちは@sandeesh。入力のおかげで。私はこれがより現実的な方法だろうと思う。私はあなたのアドバイスに従って、 "手動で"配列を検証していました。 –

0

注: project_type以下のコードでは*

$ validate_response =バリ:: $データ、配列( (作る配列を検証するために使用される 'project_type *' => '必要'、
) );

if ($validate_response->fails()) { 
return redirect($request->url())->withErrors($validate_response)->withInput(); 
} else { 
} 
関連する問題