【问题标题】:Laravel Validate Checkbox Certain ValueLaravel 验证复选框某些值
【发布时间】:2016-06-21 22:46:49
【问题描述】:

我只需要知道如何验证我的复选框值数组是否位于某个值列表中。所以,我正在使用如下所示的“in:”验证规则,但它返回的错误是复选框的值无效。因为它是通过 AJAX 发送的值数组,所以我需要做一些不同的事情吗?

控制器:

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"/>

更新:

所以,我在 Laravel 文档中发现您可以使用 * 来验证数组以获取数组中的键/值。但是,在我的数组中它只是 Type[] 所以我尝试了以下没有运气。

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

只是不工作。我知道我需要使用* 检索数组值。

更新:

当这个验证选项仅在 Laravel 5.2 中可用时,我正在运行 Laravel 5.1。解决了。​​

【问题讨论】:

  • 找到解决办法了吗
  • 还没来得及检查。我今晚会更新这个帖子。但是,我已经按照您的建议进行了操作,但没有正确验证。它不识别验证标准并允许提交表单。
  • 如果你只使用required?没有in。并且Type的拼写必须与表格中的完全相同(1. 字母大写)
  • 在“控制器”部分下的原始问题中。该验证适用于 required,但会在“in”条件下引发错误。发生的情况是验证正在抓取“类型”,因此所需的标准很好(只需选中一个框),但“输入”标准需要数组中的基础值,因此它认为我的值不是A、B、C、D。
  • 我想我明白了!忘记required

标签: laravel


【解决方案1】:

在 laravel 5 ..

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

为我工作的复选框

【讨论】:

    【解决方案2】:

    首先required 在使用in 时不是必需的,因为它必须是ABC。这就像已经需要一个“multiple”。

    第二个:如图docs就用:

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

    因为您的输入数组被命名为Type。这将验证所有名为 Type 的输入。

    为了清楚,星号可以替换为例如one 仅验证名为 Type[one] 的输入:

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

    或者如果输入将被命名为Type[one][name]

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

    【讨论】:

    • 所以,为了测试它,我将验证更改为“Type.0”,它工作正常。专门使用 * 时似乎是一个问题。我在 Laracasts 上发帖,看看是否有人有其他想法。我会在这里发布任何更新。感谢您迄今为止的帮助!
    • 更新到 Laravel 5.2 解决。
    【解决方案3】:

    你试试这个

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

    【讨论】:

    • 不工作。我在文档中找到了一些东西,但我在实施它时遇到了麻烦。这是“验证数组”部分。 laravel.com/docs/5.2/validation#custom-validation-rules
    • 使用这个 $validator = Validator::make($request->all(), [ 'type.*' => 'required|in:A,B,C,D' // 或'type*' => '必需|in:A,B,C,D', ]);
    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 2010-09-22
    • 2017-03-19
    • 2017-06-10
    • 2016-07-27
    • 1970-01-01
    • 2017-05-18
    • 2020-02-27
    相关资源
    最近更新 更多