如何在laravel中使用multi required_if?

时间:2015-04-13 15:58:03

标签: php laravel laravel-5

1)我是laravel的新手,想要整合验证规则。我的要求是根据另外两个字段强制要求第三个字段。如果a和b都为真,则需要字段C.我已经使用 required_if 来基于其他单个字段进行验证,但是如何使用 required_if 检查两个字段?

2)为了实现上述功能,我也尝试了自定义验证规则。但只有在我同时提出所需规则的情况下,它才能正常工作。

例如:

'number_users' => 'required|custom_rule'   //working 
'number_users' => 'custom_rule'   //Not working

5 个答案:

答案 0 :(得分:14)

您可以使用conditional rules

这是一个简单的例子:

$input = [
    'a' => true,
    'b' => true,
    'c' => ''
];

$rules = [
    'a' => 'required',
    'b' => 'required'
    // specify no rules for c, we'll do that below
];

$validator = Validator::make($input, $rules);

// now here's where the magic happens
$validator->sometimes('c', 'required', function($input){
    return ($input->a == true && $input->b == true);
});

dd($validator->passes()); // false in this case

答案 1 :(得分:1)

您还可以创建一个通用验证器来测试AND运算符。

Validator::extend('required_multiple', function ($attribute, $value, $parameters, $validator) {
    $isRequired = true;

    for ($i = 0; $i <= count($parameters) / 2; $i = $i + 2) {
        $parameter = $parameters[$i];
        $value = $parameters[$i + 1];

        if (in_array($value, ['true', 'false'])) {
            $value = (bool)$value;
        }

        if ($validator->getData()[$parameter] !== $value) {
            $isRequired = false;
        }
    }

    if (!$isRequired || ($isRequired && $validator->getData()[$attribute])) {
        return true;
    } else {
        return false;
    }
});

然后在您的控制器规则中:

'phone_input_label' => 'required_multiple:goal,lead-capture,phone_input_active,true|string',

如果目标等于“潜在顾客捕获”,则这将需要“ phone_input_label”。 并且phone_input_active为true。

该自定义验证程序的唯一问题是您需要发送所有参数。如果在请求中未发送“ phone_input_label”,则它甚至都不会通过自定义验证器,因此不确定为什么会发生。

答案 2 :(得分:0)

Laravel评估给予者顺序中的每个规则。让我们说:

'number_users' => 'required|custom_a|custom_b'
custom_brequired为真时,将评估

custom_b规则,因为这些规则已经过评估。

答案 3 :(得分:0)

这是你的答案

 'field3' => 'required_if:field_1 | required_if:field_2'

答案 4 :(得分:-3)

看一下我粘贴下面链接的laravel验证文档,您可以使用required_if,required_without和其他来满足您的需求。

See the Laravel Validation Docs Here