Je voudrais valider un formulaire en utilisant à la fois des messages personnalisés et des attributs. Au lieu de nom: le nom ne doit pas comporter plus de 20 caractères.
l'utilisateur devrait voir Name: veuillez utiliser moins de caractères.
, par exemple.
J'utilise AJAX et les clés et valeurs de l'objet response.data.errors
que Laravel renvoie. J'utilise Laravel 5.7.
Ceci est une version simplifiée de la fonction validator
dans mon 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; }
3 Réponses :
Cela provient de validation.php situé dans resources / Lang / xx /
MODIFIER:
Vous devrez utiliser
$ messages = [
'name.max' => 'Votre phrase ici',
];
Vous vous trompez sur les messages : quelque chose comme 'max' => 'Votre phrase ici'
convient si vous souhaitez afficher le même message pour toutes les validations de < code> règle max . Mais ma question concerne de toute façon les attributs .
J'ai écrit 'name.max' pas 'max' seul
Je suis au courant de ça. Mon intention était de vous informer que votre réponse est fausse: je n'ai pas besoin d'utiliser name.max
.
Les attributs ne remplacent pas les noms de clé, ils sont utilisés pour modifier l'apparence d'une clé dans un message - c'est-à-dire Le champ Nom est obligatoire
- pour réaliser ce que vous essayez de faire dans votre question vous devrez créer un nouveau tableau de données.
protected function validator(array $data) { $data = [ 'Name' => $data['name'] ?? '', // ... ]; // ... Validator::make($data, $rules, $messages); }
Merci, je ne m'attendais pas à ça. Votre solution fonctionne correctement. Je m'attendais à devoir tout inverser dans la méthode create
( 'name' => $ data ['Name']
), mais ce n'était pas le cas .
utilisez Laravel Form Request , faites défiler jusqu'à Dans le contrôleur Personnalisation des messages d'erreur code> section. Consultez l'exemple de code ci-dessous.
public function register(UserRegistrationForm $request)
{
// do saving here
}
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'
];
}
}
Pic grammatical: "Veuillez utiliser moins lait" (indénombrable), "Veuillez utiliser moins caractères" (dénombrable).
Merci! Je ne peux pas croire que j'ai réellement écrit `` moins de personnages '' ...