Maison  >  Questions et réponses  >  le corps du texte

"Veuillez remplir ce champ" au lieu du message d'erreur personnalisé | Symphony 5

Bonjour, j'ai un formulaire Symfony 5 avec des contraintes sur mes champs, mes contraintes sur la longueur fonctionnent bien, mais le NotBlank est incorrect. J'ai un champs "type" et "label" et je teste le formulaire et les contraintes "type", si je valide le formulaire avec "type" vide il affiche le message par défaut du navigateur "Veuillez remplir ce champ" et je J'aimerais qu'un message personnalisé soit défini dans l'entité pour la contrainte "NotBlank".

Je pense que le problème est causé par "required => true" car si je le change en "false" et que j'ajoute "empty_data => ''" cela fonctionne et je peux voir mon message de personnalisation, mais pas exactement parce que dans mon formulaire de modification si j'efface le champ "type" et que je le valide, il apparaîtra avec le message suivant : Type de paramètre attendu "string" donné au chemin de propriété "type" "null".

J'utilise Symfony 5, Bootstrap 5, voici mes entités, mon formulaire twig et mon FormType.php

Entité

/**
     * @ORM\Column(type="string", length=255)
     * @Assert\Length(
     *      min = 2,
     *      max = 50,
     *      minMessage = "Le type doit faire au minimum {{ limit }} caractères",
     *      maxMessage = "Le type doit faire au maximum {{ limit }} caractères"
     * )
     * @Assert\NotBlank(
     *      message = "Le type est un champ obligatoire"
     * )
     */
    private $type;

Forme de branche d'arbre

{{ form_start(form) }}
    <div class="container-card-global mb-5">
        <div class="form-field">
            {{form_label(form.type)}}
            {{form_errors(form.type)}}
            {{form_widget(form.type)}}
        </div>

        <div class="form-field">
            {{form_label(form.description)}}
            {{form_widget(form.description)}}
            {{form_errors(form.description)}}
        </div>

        <div class="form-field">
            {{form_label(form.statut)}}
            {{form_widget(form.statut)}}
        </div>


        <div class="text-center">
            <button class="btn btn-save-global">{{ button_label|default('Valider') }}</button>
        </div>
    </div>
{{ form_end(form) }}

formtype.php

$builder
            ->add('type', TextType::class, [
                'required' => true,
                'label' => 'Type',
            ])

S'il vous plaît, aidez-moi !

J'ai vérifié certains forums et j'ai essayé d'utiliser "novalidate" mais il renvoie le même message d'erreur, je voulais vraiment garder "required => true" et j'ai réussi à obtenir mon message personnalisé "Ce champ ne peut pas être vide".

P粉877719694P粉877719694185 Il y a quelques jours325

répondre à tous(1)je répondrai

  • P粉360266095

    P粉3602660952024-03-23 09:28:13

    Vous confondez les erreurs côté serveur avec les erreurs frontales. Lorsque vous écrivez, required => true 时,它会将 html 属性 required est appliqué à votre élément d'entrée. https://www.w3schools.com/tags/tryit.asp?filename=try html5_input_required

    C'est pourquoi vous voyez l'erreur du navigateur par défaut. Si vous voulez l'essayer, vous pouvez utiliser F12 pour inspecter les balises html saisies et supprimer ce dont vous avez besoin.

    Alors. Si vous parvenez à soumettre le formulaire (envoi des données au serveur). Symfony appliquera ses propres contraintes (vos assertions).

    C'est pourquoi votre formulaire affiche correctement l'erreur, car vous utilisez cette fonction à chaque entrée du formulaire form_errors.

    Mais dans ce cas, l'erreur que vous voyez est renvoyée par le serveur. Ce ne sont pas des erreurs de navigateur.

    Quoi qu'il en soit, garder required => true est bon pour l'UX (expérience utilisateur). Pour une expérience utilisateur complète, afficher uniquement les erreurs « dynamiques » est une bonne chose. Cela évite aux utilisateurs d'être forcés de s'engager avant de savoir qu'ils ont commis une erreur.

    Mais les contraintes Symfony protègent également ce que quelqu'un peut soumettre afin que vous n'enregistriez jamais de données incomplètes. On peut l’imaginer comme la « Muraille de Chine ». Une dernière chose pour projeter les données de votre projet.

    répondre
    0
  • Annulerrépondre