如何合并Laravel Eloquent验证规则与Rule::验证规则?
Laravel验证规则合并语法问题解决
你尝试合并管道式验证规则与Rule::unique规则时出现报错:
Method Illuminate\Validation\Validator::validateRequired|email does not exist.
错误代码示例:
public function rules() { return [ 'email' => [ 'required|email:rfc,dns|min:5|max:75', Rule::unique('email_updates', 'email', 'product_uuid', 'affiliate_uuid') ], ]; }
单独使用管道式规则或Rule::unique规则均能正常运行,但合并时需注意数组形式的规则定义逻辑:数组中的每个元素必须是单个验证规则(字符串)或Rule实例,不能将多个管道规则打包成一个数组元素。
正确的合并写法
将管道式规则拆分为数组中的独立元素,与Rule::unique并列:
public function rules() { return [ 'email' => [ 'required', 'email:rfc,dns', 'min:5', 'max:75', Rule::unique('email_updates', 'email', 'product_uuid', 'affiliate_uuid') ], ]; }
原因说明
Laravel处理数组形式的验证规则时,会将每个数组元素当作单独的验证器方法调用。你之前的写法把整个管道串作为一个元素,Laravel会误认为这是一个名为required|email:rfc,dns|min:5|max:75的验证方法,而该方法不存在,因此触发报错。
内容的提问来源于stack exchange,提问作者wruckie
相关产品推荐
相关产品推荐

