我如何要求在Laravel验证中检查三个值之一?

时间:2018-10-03 18:46:43

标签: php laravel validation

我有一个复选框列表,如下所示:

enter image description here

完整列表在这里:

enter image description here

我正在使用section_id将它们分组为列/行。这是输入的代码:

    <div class="checkbox c-checkbox">
          <label>
            <input class="{{ $screen->section->slug }}"
                   type="checkbox"
                   value="{{ $screen->id }}"
                   name="screens[]"{{
              isset($selected) && in_array($screen->id, $selected)
              ? ' checked'
              : ''
            }}><span class="fa fa-check"></span>{{ $screen->name }}
          </label>
        </div>

到目前为止很好。

我遇到的问题是,我需要要求至少选中标准生物特征识别所要求的以下复选框之一。

我该如何验证呢?

我有一个EventRequest文件,该文件可以处理我的所有验证,并且我在想类似的东西:

'screens.*' => 'nullable|integer|exists:screens,id|max:255|required_without_all:5,6,7',

该代码不起作用,但我希望能清楚地说明我需要确保检查这3个ID之一。或者我需要要求section_id中至少有一项存在于数组中。关于如何执行此操作的想法?

public function rules(Request $request) : array
{
    return [
        ...
        'screens.*' => 'nullable|integer|exists:screens,id|max:255',
        ...
    ];

1 个答案:

答案 0 :(得分:0)

您是否尝试过制定自定义验证规则?

文档:https://laravel.com/docs/5.7/validation#custom-validation-rules

这是我曾经做过的验证码验证器的样本验证器类。 $validator可以访问其余表单数据。

我使用Validator::extend()

在服务提供商中注册了它
<?php

namespace App\Auth\Validators;


use App\PendingUserActivation;


/**
 * Class ActivationTokenExists
 *
 * @package \App\Auth\Rules
 */
class VerificationCodeValidator implements ValidatorInterface
{



public function passes($attribute, $value, $parameters, $validator)
{

    $verification_code = $validator->getData()['verification_code'];
    $token = $validator->getData()['token'];
    return $this->verify($token, $verification_code);
}

/**
 * @param $userToken
 * @param $verification_code
 * @return bool
 */
public function verify($userToken, $verification_code)
{
    $passes = PendingUserActivation::where('token', $userToken)
        ->where('verification_code', $verification_code)
        ->exists();

    return $passes;
}


/** @return string */
public static function getMessage()
{
    return 'We were unable to activate an account using the :attribute provided. Please try again.';
}

/** @return string */
public static function getName()
{
   return 'verification_code_valid';
}
}