2015-10-14 125 views
1

我有一个使用cloneya jQuery plugin克隆表单元素的表单。将被克隆的元素看起来像这样:Laravel 5使用表单请求验证克隆字段

<div class="form-group"> 
    <label for="name">Item name</label> 
    <input class="form-control" name="name[]" type="text"> 
</div> 
<div class="form-group"> 
    <label for="count">Item count</label> 
    <input class="form-control" name="count[]" type="text"> 
</div> 

正如你可以看到,每一个输入将是一个数组,而不是字符串。我想验证那些使用Laravel Form Request。这是我的规则:

public function rules() 
{ 
    return [ 
     'name' => 'required|between:3,50', 
     'count' => 'required|integer|min:1', 
    ]; 
} 

但这不起作用。当我提交表单时,我收到以下错误消息:

htmlentities() expects parameter 1 to be string, array given 

我一直在寻找解决方案,但找不到合适的解决方案。任何建议,将不胜感激!

回答

2

基本上,你rules()方法,你需要确定有多少namecount元素中有POST,然后为他们每个人创建规则:

public function rules() 
{ 
    $rules = []; 

    foreach ($this->request->get('name') as $index => $val) { 
     $rules['name.' . $index] = 'required|between:3,50'; 
    } 

    foreach ($this->request->get('count') as $index => $val) { 
     $rules['count.' . $index] = 'required|integer|min:1'; 
    } 

    return $rules; 
} 

请检查this post

+0

是的,我已经试过这种方式,但它仍然无法正常工作。我认为原因是在字段名称中使用键/索引,如''。但我的问题是,我们不知道有多少名称和用户会提交。 – rendyhihi

+0

自从您使用'foreach'循环以来,您并不需要知道有多少'name'和'count'。 '应该对应规则数组中的$ rules ['count.0']'。你有没有试图故意造成验证错误,并在视图中转储'$ errors'变量?你可以发布倾销的'$错误'? –

+0

你说得对,我们在这里使用'foreach',这样我们就不必担心提交了多少字段。但它仍然显示与以前相同的错误:'htmlentities()期望参数1是字符串,数组给定'。我不能转储'$ errors'变量,因为请求还没有被规则验证。 – rendyhihi