Obtener mensaje de error de la validación de Laravel

3 minutos de lectura

Uso el validador incorporado de Laravel y quiero obtener el primer mensaje de error

if ($validator->fails()) {
     $error = $validator->messages()->toJson();
     .....
}

Este es el resultado cuando imprimo error

{"name":["The name must be at least 5 characters."],"alamat":["The address must be at least 5 characters."]}

En el ejemplo anterior, quiero obtener el primer error, que es “El nombre debe tener al menos 5 caracteres”. ¿Cómo puedo hacer eso?

Prueba esto:

if ($validator->fails()) {
   $error = $validator->errors()->first();
}

  • sí, gracias, pero esto solo da el primer error.

    – Jovylle

    12 de octubre de 2021 a las 2:53

  • Ahorra mi tiempo. gracias

    – nageen nayak

    1 de febrero a las 13:04

avatar de usuario
valentin shi

Según 2019 Laravel 5.8 y superior, obtener todos los mensajes de error del validador es tan fácil como esto:

// create the validator and make a validation here...
if ($validator->fails()) {
    $fieldsWithErrorMessagesArray = $validator->messages()->get('*');
}

Obtendrá la matriz de matrices de los nombres de los campos y los mensajes de error. Algo como esto:

[
    'price'=>
        [ 
            0 => 'Price must be integer',
            1 => 'Price must be greater than 0'
        ]
    'password' => [
        [
            0 => 'Password is required'
        ]
    ]
    
]

Puede utilizar otros captadores de mensajes de validación que Illuminate\Support\MessageBag clase proporciona (en realidad es el tipo de objeto que $validator->messages() rendimientos anteriores).

Bolsa de mensajes Mensajes de error Asistentes adicionales

Ir your_laravel_project_dir/vendor/illuminate/support/MessageBag.php y encontrar algunos métodos útiles como keys, has, hasAny, first, all, isEmpty etc. que pueda necesitar mientras verifica errores de validación particulares y personaliza los mensajes de respuesta HTTP.

Es fácil entender lo que hacen al mirar el código fuente. Aquí está el Referencia de la API de Laravel 5.8 aunque probablemente menos útil que el código fuente.

En su solicitud ajax, cuando obtiene el dataprobar data.name.

Esto le dará el mensaje de error para el name campo.

$.ajax({
        url: "/your-save-url",
        type: "post",
        data: serializedData,
        success: function(data) { alert(data.name)}
    });

  • No es una solución, por supuesto. Los datos no siempre están en formato json y el campo de error no siempre es el nombre

    – ZZZ

    15 de febrero de 2016 a las 23:42

  • $error = $validator->messages()->toJson(); Esta declaración indica que está utilizando json respuesta. También el json El campo contiene el atributo de nombre del campo en su formulario. En tu caso, los nombres son name y alamat.

    –Jilson Thomas

    15/02/2016 a las 23:45

  • Cómo obtener el primer error en el backend de Laravel, para que devuelva “El nombre debe tener al menos 5 caracteres”.

    – ZZZ

    15 de febrero de 2016 a las 23:54

  • $error['name'] esto dará el error para el name.

    –Jilson Thomas

    15/02/2016 a las 23:55

Si la validación falla, el withErrors El método se puede utilizar para mostrar los mensajes de error en la sesión. Esta es una matriz y este método compartirá automáticamente $errors con todas las vistas después de la redirección.

return redirect('register')->withErrors($validator, 'login');

los MessageBag se puede acceder usando la instancia desde el $errors variable:

{{ $errors->login->first('email') }}

API de formulario documentos

Espero que esto sea útil.

Si está utilizando la visualización de errores de estilo tostador, esto funcionará:

@if(session()->get('errors'))
    toastr.error("{{ session()->get('errors')->first() }}");
@endif

avatar de usuario
Julio Popócatl

si quieres hacerlo dentro del controlador puedes:

Arr::first(Arr::flatten($validator->messages()->get('*')))

recibirás el primer mensaje de texto

The email must be accepted.

¿Ha sido útil esta solución?