Me gustaría validar un formulario utilizando mensajes personalizados y atributos. En lugar de name: The name may not be greater than 20 characters., el usuario debería ver Name: Please use fewer characters., por ejemplo.

Estoy usando AJAX y ambas claves y valores del objeto response.data.errors que Laravel devuelve. Estoy usando Laravel 5.7.

Esta es una versión simplificada de la función validator en mi RegisterController.

protected function validator(array $data)
{
    // Nice attribute names
    $attributes = [
        'name' => 'Name',
        // ...
    ];

    // Custom messages
    $messages =  [
        'max' => 'Please use fewer characters.'
        // ...
    ];

    // Rules
    $rules = [
        'name'=> 'required|max:20',
        // ...
    ];

    // Working for messages, but not for attribute names
    $validator = Validator::make($data, $rules, $messages, $attributes);

    // Also not working
    // $validator->setAttributeNames($attributes);

    return $validator;
}

Cuando hay un error de validación, el usuario recibe un mensaje como name: Please use fewer characters.. Eso significa que se muestra el mensaje de mi matriz personalizada, pero se usa el nombre de atributo predeterminado. ¿Qué pasa aquí?

0
Pida 10 may. 2019 a las 17:18

3 respuestas

La mejor respuesta

Los atributos no reemplazan los nombres de las claves, se usan para cambiar la apariencia de una clave dentro de un mensaje, es decir, The Name field is required, para lograr lo que está tratando de hacer en su pregunta, necesitará crear una nueva matriz de datos .


protected function validator(array $data)
{
    $data = [
        'Name' => $data['name'] ?? '',
        // ...
    ];

    // ...

    Validator::make($data, $rules, $messages);
}
1
Jack 10 may. 2019 a las 14:46

Eso viene de validation.php ubicado en resources / Lang / xx /

EDITAR:

Tendrás que usar

$messages = [ 'name.max' => 'Your sentence here', ];

0
r0ulito 10 may. 2019 a las 14:22

Use Solicitud de formulario de Laravel, desplácese hacia abajo hasta la sección Customizing The Error Messages. Mira el siguiente código de muestra.

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class UserRegistrationForm extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required|max:20',
        ];
    }

    /**
     * Get the error messages for the defined validation rules.
     *
     * @return array
     */
    public function messages()
    {
        return [
            'name.max' => 'Please use less characters'
        ];
    }
}

En el controlador

public function register(UserRegistrationForm $request)
    {
         // do saving here
    }
0
Michael Nguyen 10 may. 2019 a las 19:54