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í?
3 respuestas
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);
}
Eso viene de validation.php ubicado en resources / Lang / xx /
EDITAR:
Tendrás que usar
$messages = [
'name.max' => 'Your sentence here',
];
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
}
Preguntas relacionadas
Nuevas preguntas
laravel
Laravel es un marco web PHP gratuito y de código abierto, creado por Taylor Otwell y destinado al desarrollo de aplicaciones web siguiendo el patrón arquitectónico modelo-vista-controlador (MVC) y basado en Symfony. El código fuente de Laravel está alojado en GitHub y tiene licencia bajo los términos de la Licencia MIT.