2015-10-14 96 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