我的控制器中有自定义验证规则:
$this->validate($request, [
'currency' => [
'required',
'numeric',
'min:0',
'max:7'
],
'price' => [
'nullable',
"required_if:currency, !=, 0",
'numeric',
'min:1',
'max:1000000'
],
], $messages);
为什么在
required_if:currency, ==, 0
工作而不是在这个 required_if:currency, !=, 0
情况下工作?
就我而言,仅当
price
字段值不等于 currency
时才需要
0
字段
我也累了:
required_unless,currency,0
required_unless:currency,0
我建议你使用
根据[1]:https://laravel.com/docs/5.5/validation#rule-required-unlessrequired_unless:currency,0
required_if:currency, ==, 0
之所以有效,是因为 currency
值必须等于值名称后面的任何值(在本例中为 currency
)。换句话说,如果货币是 price
或 ==
,则在这种情况下需要 0
。
因此,在这种情况下,
==
并不意味着通常的“等于”。它只是被视为字符串值。这也是为什么 required_if:currency, !=, 0
无法按您的预期工作。
要仅当
price
字段值不等于 0 时才需要 currency
字段,您可以使用 required_unless:currency,0
。
换句话说,
price
始终是必需的,除非currency
等于0。
您可以使用这个:
use Illuminate\Validation\Rule;
Rule::requiredIf($request->get('currency') != 0)