2016-03-08 51 views
2

我只是需要知道如何驗證我的數組複選框值是否在某個值列表中。因此,我使用如下所示的「in:」驗證規則,但它返回錯誤,即選中框的值無效。我是否需要做一些不同的事情,因爲它是通過AJAX發送的值數組?Laravel驗證複選框某些值

控制器:

if ($request->ajax()) 
{ 
    /*Create record in UserType Model with the values from the Type checkboxes*/ 

    $Type = Input::get('Type'); 

    $this->validate($request, [ 
     'Type' => 'required|in:A,B,C,D', 
    ],[ 
     'required' => 'You must select at least one.', 
    ]); 

    foreach ($Type as $key => $value) 
    { 
     Auth::user()->userType()->create([ 
      'profile_id' => Auth::user()->id, 
      'type' => $value, 
     ]); 
    } 
} 

在我的形式,我有以下輸入...

<input type="checkbox" name="Type[]" value="A"/> 
<input type="checkbox" name="Type[]" value="B"/> 
<input type="checkbox" name="Type[]" value="C"/> 

UPDATE:

所以,我的Laravel文檔中發現,你可以驗證使用*來獲取數組中的鍵/值的數組。然而,在我的數組中它只是Type [],所以我嘗試了以下,沒有運氣。

$this->validate($request,[ 
    'type.*' => 'required|in:A,B,C,D' 
    // or 
    'type*' => 'required|in:A,B,C,D' 
]); 

只是不工作。我知道我需要檢索*的數組值。

UPDATE:

我跑Laravel 5.1時,該選項用於驗證只在Laravel 5.2可用。解決了。

+0

您是否找到解決方案 –

+0

H沒有機會檢查。我今晚會更新這個主題。但是,我已經完成了您的建議,並且沒有正確驗證。它不承認驗證標準並允許提交表單。 –

+0

如果你只是使用'required'?沒有'in'。和'類型'必須拼寫完全一樣的形式,雖然(1。字母大寫) –

回答

2

首先:本required使用in時是沒有必要的,因爲它必須是ABC。這就像是一個「多個」已經需要。

:正如docs所示只需使用:

$this->validate($request,[ 
    'Type.*' => 'in:A,B,C,D' 
],[ 
    'in' => 'You must select at least one.', 
]); 

作爲輸入數組被命名爲Type。這將驗證名爲Type的所有輸入。

爲了清楚星號可以被例如one只是驗證命名Type[one]輸入:

 $this->validate($request, [ 
     'Type' => 'required|array' 
    ]); 

'Type.one' => 'in:A,B,C,D' 

,或者輸入將被命名爲Type[one][name]

'Type.one.name' => 'in:A,B,C,D' 
+0

因此,爲了測試它,我將驗證更改爲'Type.0',並且它正常工作。似乎是特別使用*時的問題。我張貼在Laracasts上看看是否有人有其他想法。我會在這裏發佈任何更新。感謝您的幫助! –

+0

通過更新Laravel 5.2解決。 –

0

你試試這個

if($this->has('Type') && is_array($this->get('Type'))){ 

     foreach($this->get('Type') as $key => $Type){ 

      $rules['Type'.$key.'] = 'required|in:A,B,C,D'; 
     } 
+0

不工作。我發現了一些文檔,但我在實施時遇到了麻煩。這是「驗證陣列」部分。 https://laravel.com/docs/5.2/validation#custom-validation-rules –

+0

使用此工具 $ validator = Validator :: make($ request-> all(),'type。*'=>' A:B,C,D', ]); –

0

在laravel 5 ..爲我工作複選框