如果另一个字段为假,如何验证一个字段必须为真

时间:2018-12-14 12:10:48

标签: php laravel laravel-5

以下是我目前的验证摘要:

        'independent_financial_advisor' => 'required|boolean',
        'understand_objective' => 'required|boolean',
        'confirm_objective' => 'required|boolean',
        'understand_term_held' => 'required|boolean',
        'tax_relief' => 'required|boolean',

我需要验证independent_financial_advisor为false时,以下其余4个字段必须为true。我找不到任何可以执行此操作的Laravel规则,因此我考虑使用闭包创建自定义规则。

问题是我不知道如何在闭包中引用另一个字段来检查其值。

解决此问题的最佳方法是什么?谢谢

4 个答案:

答案 0 :(得分:2)

'independent_financial_advisor' => 'required|boolean',
'understand_objective' => 'boolean|required_if:independent_financial_advisor,0,false',
'confirm_objective' => 'boolean|required_if:independent_financial_advisor,0,false',
'understand_term_held' => 'boolean|required_if:independent_financial_advisor,0,false',
'tax_relief' => 'boolean|required_if:independent_financial_advisor,0,false',

有关更多验证规则,请在此处查看laravel文档Replace implicit wait with explicit wait (selenium webdriver & java)

答案 1 :(得分:2)

我添加了一个名为true_if_reference_is_false的自定义验证规则,并向其传递了一个参数independent_financial_advisor

所以验证看起来像这样:

$this->validate($request, [
    'independent_financial_advisor' => 'required|boolean',
    'understand_objective' => 'required|boolean|true_if_reference_is_false:independent_financial_advisor',
    'confirm_objective' => 'required|boolean|true_if_reference_is_false:independent_financial_advisor',
    'understand_term_held' => 'required|boolean|true_if_reference_is_false:independent_financial_advisor',
    'tax_relief' => 'required|boolean|true_if_reference_is_false:independent_financial_advisor'
]);

您需要在App\Providers\AppServiceProvider.php中定义此验证规则 导入外观验证器。

use Illuminate\Support\Facades\Validator;

并在boot方法中定义规则:

Validator::extend('true_if_reference_is_false', function ($key, $value, $parameters, $validator) {
    $request = request();
    $keyReference = $parameters[0];
    if ($request->has($parameters[0]) && $request->$keyReference == false)
        return (bool)$request->$key;
    else
        return true;
});

希望这会有所帮助:)

答案 2 :(得分:2)

$validator = Validator::make($request->all(), [
                'tax_relief'=>['required','in:true']
            ]);
if ($validator->fails()) {
                return response()->json($validator->errors());
}

答案 3 :(得分:0)

我今天遇到了这个问题,并使用 conditional validation closure 解决了它(因为它在整个应用中只使用过一次)。

基本上,用户必须根据需要标记 phoneemail 字段。它们可以都是 true 或只有一个可以是 true,但 不能 都是 false

诀窍是 use 闭包中的 request 对象以访问需要作为验证检查一部分的其他字段。这些字段是 array casted property 的一部分,这就是它具有 . 的原因。

           'required_order_fields.phone' => [
                Rule::in(["true", "false"]),
                function ($attribute, $value, $fail) use ($request) {
                    if ($value === "false" && $request->input('required_order_fields.email') === "false") {
                        $fail('The '.$attribute.' must be required if the email customer field is not required');
                    }
                },
            ],
            'required_order_fields.email' => [
                Rule::in(["true", "false"]),
                function ($attribute, $value, $fail) use ($request) {
                    if ($value === "false" && $request->input('required_order_fields.phone') === "false") {
                        $fail('The '.$attribute.' must be required if the phone customer field is not required');
                    }
                },
            ],