如果另一个字段为 false,如何验证一个字段必须为 true

Gra*_*eme 6 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',
Run Code Online (Sandbox Code Playgroud)

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

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

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

Sad*_*eri 6

我添加了一个名为 的自定义验证规则,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'
]);
Run Code Online (Sandbox Code Playgroud)

您需要在App\Providers\AppServiceProvider.php Import Facade Validator 中定义此验证规则。

use Illuminate\Support\Facades\Validator;
Run Code Online (Sandbox Code Playgroud)

并在方法中定义规则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;
});
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)