当你在控制器内使用$this->validate($request, $rules)
函数时,当前在流明中,它将为你的验证规则抛出一个ValidationException
错误(如果有任何失败的话)。
但是,我需要为每个验证规则都有一个代码。我们可以为规则设置自定义消息,但我需要添加一个唯一的代码。
我知道有一个“formatErrorsUsing”函数,您可以在其中传递格式化程序。但是传递给它的参数返回的数据已经删除了失败的规则的名称,并用它们的消息替换了它们。我当然不希望对消息进行字符串检查以确定应该去的代码。
我考虑将所有规则的消息设置为“CODE | This is the message”并解析代码,但这感觉就像一个非常黑客的解决方案。必须有一个更干净的方式吗?
答案 0 :(得分:0)
我现在用以下解决方案解决了这个问题:
private function ruleToCode($rule) {
$map = [
'Required' => 1001,
];
if(isset($map[$rule])) {
return $map[$rule];
}
return $rule;
}
public function formatValidationErrors(Validator $validator) {
$errors = [];
foreach($validator->failed() as $field => $failed) {
foreach($failed as $rule => $params) {
$errors[] = [
'code' => $this->ruleToCode($rule),
'field' => $field,
];
}
}
return $errors;
}