Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel验证数组选择字段_Laravel_Validation_Select - Fatal编程技术网

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

Laravel轻松验证基于数组的表单输入字段

<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;

        });
!!}