我的问题是关于Laravel验证规则。我有两个输入a和b。a是一个选择输入,有三个可能的值:x、y和z。我想编写以下规则:b必须有一个值**(仅当**a值为x时)。否则b必须为空。有没有办法写这样的规则?我试过required_with,required_without,但似乎它不能涵盖我的情况。换句话说,如果前面的解释不够清楚:
a
b
x
y
z
required_with
required_without
inb24sb21#
您必须创建自己的验证规则。编辑app/Providers/AppServiceProvider.php并将此验证规则添加到boot方法:
app/Providers/AppServiceProvider.php
boot
// Extends the validator \Validator::extendImplicit( 'empty_if', function ($attribute, $value, $parameters, $validator) { $data = request()->input($parameters[0]); $parameters_values = array_slice($parameters, 1); foreach ($parameters_values as $parameter_value) { if ($data == $parameter_value && !empty($value)) { return false; } } return true; }); // (optional) Display error replacement \Validator::replacer( 'empty_if', function ($message, $attribute, $rule, $parameters) { return str_replace( [':other', ':value'], [$parameters[0], request()->input($parameters[0])], $message ); });
resources/lang/en/validation.php
'empty_if' => 'The :attribute field must be empty when :other is :value.',
然后在一个控制器中使用这个规则(用require_if来尊重原始帖子的两个规则):
require_if
$attributes = request()->validate([ 'a' => 'required', 'b' => 'required_if:a,x|empty_if:a,y,z' ]);
真管用!
empty_if
empty_unless
pw9qyyiw2#
需要,如果
**required_if:anotherfield,value,...**如果anotherfield字段等于任何值,则要验证的字段必须存在且不为空。
'b' => 'required_if:a,x'
nwlqm0z13#
Laravel有自己的方法,当一个字段存在时,它会要求另一个字段。这个方法被命名为required_with。
rkue9o1l4#
在Laravel 8+中,检查是否禁止和禁止_如果验证器对此有效:
'b' => 'required_if:a,x|prohibited_if:a,!x'
4条答案
按热度按时间inb24sb21#
您必须创建自己的验证规则。
编辑
app/Providers/AppServiceProvider.php
并将此验证规则添加到boot
方法:resources/lang/en/validation.php
中创建错误消息:然后在一个控制器中使用这个规则(用
require_if
来尊重原始帖子的两个规则):真管用!
empty_if
和empty_unless
,并张贴在这里的链接 *pw9qyyiw2#
需要,如果
**required_if:anotherfield,value,...**如果anotherfield字段等于任何值,则要验证的字段必须存在且不为空。
nwlqm0z13#
Laravel有自己的方法,当一个字段存在时,它会要求另一个字段。这个方法被命名为
required_with
。rkue9o1l4#
在Laravel 8+中,检查是否禁止和禁止_如果验证器对此有效: