Laravel验证数组选择字段
Laravel轻松验证基于数组的表单输入字段Laravel验证数组选择字段,laravel,validation,select,Laravel,Validation,Select,Laravel轻松验证基于数组的表单输入字段 <input name='input_name[0][0]"> <input name='input_name[0][1]"> 但是如何验证基于数组的选择字段? 我有一个表单,其中添加了客户信息,用户必须选择客户的性别,并且可以添加无限多的客户 因此,我选择了一位客户: <select name="gender[0]"> <option selected="selected" disabled="disa
<input name='input_name[0][0]">
<input name='input_name[0][1]">
但是如何验证基于数组的选择字段?
我有一个表单,其中添加了客户信息,用户必须选择客户的性别,并且可以添加无限多的客户
因此,我选择了一位客户:
<select name="gender[0]">
<option selected="selected" disabled="disabled" hidden="hidden" value="">Gender</option>
<option value="Male">Male</option>
<option value="Female">Female</option></select>
它无法将“取消选择”选择框识别为错误
但如果我将验证规则更新为:
'gender[0]'=>'required'
'gender[1]'=>'required'
'gender[N]'=>'required'
它工作的非常好。。。(这里的“it works”是指它返回一个错误“性别字段是必需的”)
显然,Laravel在基于数组的选择名称方面存在一些问题
谢谢你的帮助 我决定自己回答这个问题
public function rules() {
$rules = [];
$gender = $this->input('gender');
foreach ($gender as $index => $item) {
$rules["gender.{$index}"] = 'required';
}
return $rules;
}
1) 第一个解决方案是使第一个“占位符”选项不被禁用(与我的情况一样,请参见上文-这是因为我使用了LaravelCollective,默认情况下他们有):
等等
事实上,如果你有很多性别[N](或者其他基于数组的选择),我认为这是最整洁的解决方案
2) 第二种解决方案由omadonex提供如下:
public function rules() {
$rules = [];
$gender = $this->input('gender');
foreach ($gender as $index => $item) {
$rules["gender.{$index}"] = 'required';
}
return $rules;
}
在这种情况下,您将为每个基于数组的select设置一个单独的规则,它将起作用(请参阅我的topicstarter文章末尾的“为什么”)。我更喜欢这个解决方案,而不是第一个,因为如果你有很多
3) 我也理解了为什么'gender[0]=>'required'
工作
和'gender.*'=>required'
不
对于基于数组的选择,如
如果你仔细想想,这是很明显的:当发布第一个选项(占位符)被禁用的select标记时,如我上面的示例所示:
<option selected="selected" disabled="disabled" hidden="hidden" value="">Gender</option>
把它放在一个圈里!我第一次找你,你真的解决了问题。干得好Thx:)不客气。祝您的项目取得成功:)
public function rules() {
$rules = [];
$gender = $this->input('gender');
foreach ($gender as $index => $item) {
$rules["gender.{$index}"] = 'required';
}
return $rules;
}
<select name="gender[0]">
<option selected="selected" hidden="hidden" value="">Gender</option>
<option value="Male">Male</option>
<option value="Female">Female</option></select>
gender[0] = '';
gender[1] = '';
public function rules() {
$rules = [];
$gender = $this->input('gender');
foreach ($gender as $index => $item) {
$rules["gender.{$index}"] = 'required';
}
return $rules;
}
<option selected="selected" disabled="disabled" hidden="hidden" value="">Gender</option>
{!!
Form::macro('selectNonDisabled', function($value, $placeholder, $array, $disabled=null, $class=null) {
$select = "<select class='form-control $class' $disabled name='$value'>";
$select .= "<option selected='selected' hidden='hidden' value=''>$placeholder</option>";
foreach ($array as $key => $value) {
$select .= "<option value='$key'>$value</option>";
}
$select .= "</select>";
return $select;
});
!!}