Para personalizar los mensajes de error de Laravel tienes dos alternativas. La primera es un poco más genérica, ya que personaliza un mensaje a través de los archivos de la traducción, language files de Laravel, que encuentras en la carpeta "resources/lang". La segunda permite personalizar los mensajes para un validación en concreto.
Personalización de mensajes de error de validación a través de los archivos de traducción: En los ficheros de idioma hay uno que se llama "validation" En él aparecen todos los mensajes, para cada regla de validación.
Por ejemplo te aparece algo como esto:
before' => 'El campo :attribute debe ser una fecha anterior a :date.',
Puedes cambiar la regla por la que te interese.
Además puedes ser un poco más preciso y especificar mensajes específicos para nombres de campos, en el array "Custom Validation Language Lines". En ese campo puedes colocar mensajes para reglas cuando son aplicadas en campos concretos de formulario.
'custom' => [
'nombre_del_campo' => [
'nombre_de_regla_validacion' => 'El mensaje personalizado',
],
'telefono_alternativo' => [
'regex' => 'El teléfono alternativo opcional, debe tener el formato (+xx) xxxxxxxxx'
]
],
Puedes saber más sobre las traducciones de mensajes de Laravel en una FAQ antigua: Cómo traducir al español los mensajes de validación de Laravel
Personalizar los mensajes de error al invocar la validación: Esto se hace mediante el método que lanza la validación. Ya sea $request->validate() o bien Validator::make().
Después del parámetro de las reglas de validación podemos indicar un segundo parámetro que sirve para definir los mensajes.
$rules = [
'name' => 'required|max:100',
];
$customMessages = [
'required' => 'Cuidado!! el campo :attribute no se puede dejar vacío',
];
$validatedData = $request->validate($rules, $customMessages);
Además, puedes indicar los mensajes específicos para cada campo. con una notación como esta: (nombre_campo.nombre_regla)
$rules = [
'name' => 'required|max:100',
];
$customMessages = [
'name.required' => 'Cuidado!! el campo del nombre no se admite vacío',
];
$validatedData = $request->validate($rules, $customMessages);