Laravel 5.4 如果出现验证问题则需要

Laravel 5.4 required if validation issue

我有 2 个字段,accepts_usd 和 price_usd。

对于美元价格,我有一个验证规则:

'price_usd'=>'integer|required_if:accepts_usd,1',

对于accepts_usd:

'accepts_usd'=>'boolean|required',

当我想存储数据时,如果我将 accepts_usd 设置为 false,它仍然要求 price_usd。

这里有什么问题?我做错了什么?

来自 laravel 文档: required_if:anotherfield,价值,...

如果另一个字段等于任何值,则验证字段必须存在且不能为空。

值不是实际值,它是另一个验证规则。

您需要将代码更改为

'price_usd'=>'integer|required_if:accepts_usd,==,1',

尝试'price_usd'=>'integer|required_if:accepts_usd,==,1',

laravel docs所述:

required_if:anotherfield,value,...

The field under validation must be present and not empty if the anotherfield field is equal to any value.

我在 Laravel 8 中遇到了同样的问题。所以我添加验证规则如下。

$validated = $request->validate([
    'name' => ['required', 'min:3', 'max:255'],
    'is_public_template' => 'boolean',

    'logo' => ['bail', 'nullable', 'required_if:is_public_template,true', 'image', 'mimes:jpeg,bmp,png,jpg'],
    'public_template_name' => ['bail', 'nullable', 'required_if:is_public_template,true', 'min:3', 'max:255'],
    'description' => ['bail', 'nullable', 'required_if:is_public_template,true', 'min:8', 'max:255'],
    'active' => 'boolean',
]); 

在我的例子中,is_public_template是一个布尔类型,所以我在required_if前面添加了bailnullable规则。

所以它工作正常。

旁注:- 你还应该转换布尔字段的值,否则它们将 return 作为普通字符串,如“1”或“0”。