Laravel验证:能否对不同属性名应用相同验证规则?
Laravel多字段同规则验证的正确方式
不行,Laravel的验证规则不支持用|分隔多个字段来共享同一套规则——你写的'key|moduleKey'会被系统识别为单个字段名(字段名叫key|moduleKey),根本不会去匹配key或moduleKey这两个实际请求字段。
给你两种实用的解决办法:
1. 字段分开定义,复用规则
如果要求两个字段都必须存在且符合相同规则,直接分别声明字段,把规则抽成变量避免重复代码:
// 定义通用规则 $commonRules = ['required', 'numeric']; $data = $request->validate([ 'key' => $commonRules, 'moduleKey' => $commonRules, ]);
2. 二选一必填场景(更贴合权限校验需求)
如果你的实际需求是请求里只要有key或moduleKey其中一个即可(权限校验常遇到这种情况),用required_without规则实现二选一验证:
$data = $request->validate([ 'key' => ['required_without:moduleKey', 'numeric'], 'moduleKey' => ['required_without:key', 'numeric'], ]);
这样只要请求包含key或moduleKey中的任意一个,且该字段是数字格式,就能通过校验。
内容的提问来源于stack exchange,提问作者Carlson
相关产品推荐
相关产品推荐

