0
votes

Laravel 5.7: Les attributs personnalisés pour la validation de formulaire ne fonctionnent pas

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;
}


2 commentaires

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 '' ...


3 Réponses :


0
votes

Cela provient de validation.php situé dans resources / Lang / xx /

MODIFIER:

Vous devrez utiliser

$ messages = [ 'name.max' => 'Votre phrase ici', ];


3 commentaires

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 .



1
votes

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);
}


1 commentaires

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 .



1
votes

utilisez Laravel Form Request , faites défiler jusqu'à Personnalisation des messages d'erreur code> section. Consultez l'exemple de code ci-dessous.

public function register(UserRegistrationForm $request)
    {
         // do saving here
    }

Dans le contrôleur

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'
        ];
    }
}


0 commentaires