Actualmente en lumen cuando usa la función $this->validate($request, $rules) dentro de un controlador, arrojará una ValidationException con error para sus reglas de validación (si alguna falla, por supuesto).
Sin embargo, necesito tener un código para cada regla de validación. Podemos configurar mensajes personalizados para las reglas, pero necesito agregar un código único.
Sé que hay una función "formatErrorsUsing", donde puedes pasar un formateador. Pero los datos devueltos por el argumento pasado ya eliminaron los nombres de las reglas que fallaron y los reemplazaron con sus mensajes. Por supuesto, no quiero verificar el mensaje para determinar el código que debe ir allí.
Consideré configurar el mensaje de todas las reglas para que fuera "CÓDIGO | Este es el mensaje" y analizar el código, pero parece una solución muy pirateada. Tiene que haber una forma más limpia, ¿verdad?
He resuelto esto por ahora con la siguiente solución:
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; }