Laravel Validator如何检测是否存在size.required等指定错误键?
实现方案
原有写法无法生效的原因是:Laravel的MessageBag类的has()方法默认按字段名匹配,不支持直接传入「字段名.验证规则」的格式查询。
以下是两种可行的实现方式:
方案1:通过failed()方法判断(推荐)
Laravel的Validator类提供的failed()方法会返回所有验证失败的规则明细,结构为以字段名为键、失败规则为值的二维数组,规则名为首字母大写的驼峰格式,示例代码如下:
// 必须先调用fails/validate方法触发验证执行 if ($validator->fails()) { $failedRules = $validator->failed(); // 判断size字段是否触发required规则失败 if (isset($failedRules['size']['Required'])) { // size.required对应的处理逻辑 } // 判断size字段是否触发numeric规则失败 elseif (isset($failedRules['size']['Numeric'])) { // size.numeric对应的处理逻辑 } // 判断size字段是否触发max规则失败 elseif (isset($failedRules['size']['Max'])) { // size.max对应的处理逻辑 } }
方案2:通过错误消息键直接匹配
如果需要直接匹配你自定义的「字段.规则」格式的错误键,可以先获取所有错误键再做匹配判断,示例代码如下:
if ($validator->fails()) { $errorKeys = array_keys($validator->errors()->messages()); if (in_array('size.required', $errorKeys)) { // 对应处理逻辑 } elseif (in_array('size.numeric', $errorKeys)) { // 对应处理逻辑 } }
内容的提问来源于stack exchange,提问作者Jaren Feng
相关产品推荐
相关产品推荐

