Reputation: 13534
I have form that has a repeated select list like the following:
<select class="form-control set-25" name="equipments[:selectName:-1]">...
<select class="form-control set-24" name="equipments[:selectName:-2]">....
<select class="form-control set-8" name="equipments[:selectName:-3]">....
I want to validate each one of those lists.
public function installCavitySave(Request $request)
{
$this->validate(request(), ['equipments.*' => 'required']);
dd(request());
}
However, the rule does not work. When I tried $this->validate(request(), ['equipments' => 'required'])
It works only if there is no any select option values selected but if one of them is selected the validation allow others to be null.
I need the validation to validate every select list named equipments[x]
where x
is any key supplied to the elements name attribute.
Upvotes: 2
Views: 798
Reputation: 2478
You can do it using a function like this:
public function validate_array($request){
$rules = [];
foreach($request->get('equipments') as $key => $val)
{
array_push($rules, ['equipments.'.$key => 'required']);
}
return $rules;
}
and then validate the rules, using $this->validate;
like so:
public function installCavitySave(Request $request)
{
//validate select boxes
$rules = $this->validate_array($request);
$this->validate($request,$rules);
}
Upvotes: 0
Reputation: 14921
The problem is not your Laravel validation rules. It's your inputs. If your select has no options, then the index does not exist in your request, which is why the validation rule will still pass because it will not loop through the index.
You can check if you are receiving the select indexes properly:
dd($request->input('equipments.*'));
If you add an empty option field by default:
<form method="POST">
<select class="form-control set-25" name="equipments[:selectName:-1]">
<option value=""></option>
<option value="test">Test</option>
</select>
<select class="form-control set-25" name="equipments[:selectName:-2]">
<option value=""></option>
<option value="test">Test</option>
</select>
<select class="form-control set-25" name="equipments[:selectName:-3]">
<option value=""></option>
<option value="test">Test</option>
</select>
<button type="submit">Submit</button>
</form>
Then in your controller:
$this->validate($request, [
'equipments.*' => 'required'
]);
The errors you will receive:
array (size=3)
'equipments.:selectName:-1' =>
array (size=1)
0 => string 'validation.required' (length=19)
'equipments.:selectName:-2' =>
array (size=1)
0 => string 'validation.required' (length=19)
'equipments.:selectName:-3' =>
array (size=1)
0 => string 'validation.required' (length=19)
Upvotes: 1