2016-03-08 134 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 ..为我工作复选框