以下是我目前的验证摘要:
'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规则,因此我考虑使用闭包创建自定义规则。
问题是我不知道如何在闭包中引用另一个字段来检查其值。
解决此问题的最佳方法是什么?谢谢
答案 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 解决了它(因为它在整个应用中只使用过一次)。
基本上,用户必须根据需要标记 phone
或 email
字段。它们可以都是 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');
}
},
],