Désactiver des form_widget dans un form_start; Symfony 5

Le problème exposé dans ce sujet a été résolu.

Bonjour :)

Petite question, premièrement, je n’ai pas très bien saisi la différence entre form_widget et form_row ?

Ensuite, j’ai mon Form/FormType.php, j’ai plusieurs champs dedans, Mail Prénom Message, donc dans mon Twig je fais :

{{ form_start(userForm) }}
  {{ form_row(userForm.mail) }}
  {{ form_row(userForm.prenom) }}
  {{ form_row(userForm.message) }}
{{ form_end(userForm) }}

Je souhaite masquer le champ prenom & message; comment puis-je faire ?

J’ai essayé Hidden, Disabled mais au final il est toujours présent… Est-ce possible de le désactiver ?

Merci =)

+0 -0

Salut !

form_widget rend ce qui permet de saisir la donnée uniquement (case à cocher, bouton radio, champ…), tandis que form_row rend le label, le widget (voir ci-avant), le message d’aide depuis la version 4.1 et les erreurs. Bref, "toute une ligne" relative à un champ.

Pour ta seconde question, j’aimerais comprendre ce que tu entends par « masquer » ainsi que tu m’expliques pourquoi tu souhaites « masquer ». La réponse va varier selon le cas.

+1 -0

Ok, donc dans mon cas, je souhaite utiliser form_widget car je n’ai pas besoin de fioriture :)

Concernant le « masquage », en fait j’ai un déjà créé un ContactFormType, et je souhaite utilisé le même mais uniquement le champ email, donc j’aimerai éviter d’en recréer un, alors je souhaite désactiver les champs prénom , message et sujet car je veux uniquement le champ email !

+0 -0

Je ne sais pas si ça répond à ta deuxième question, mais pour masquer en CSS tu peux utiliser la notation :

{{ form_row(userForm.message, {"attr": {"class": "d-none"}}) }}

Bon dans cet exemple j’utilise bootstrap mais ça fonctionne avec n’importe quelle classe css.

EDIT : En effet, comme le dit Ymox, le client à accès au code de la couche 'vue' donc pas très sécurisé de générer un formulaire ainsi.

+0 -0

Seulement masquer des champs en CSS/JS, donc uniquement visuellement côté client, c’est pas super top au niveau sécurité. Pourquoi n’as-tu besoin que du champ email ? Qu’est-ce que tu veux faire des données de ce formulaire, à quoi sert-il ?

Les classes de formulaires permettent justement d’en avoir plusieurs par entité, une pour chaque utilisation différente. Si dans un cas tu n’as besoin que d’un champ, tu peux en créer une nouvelle (nommée avec le contexte de son utilisation) qui n’ait que le champ souhaité.

+0 -0

J’avais déjà pensé à la solution du display none; mais coté client; comme dit Ymox, ce n’est pas top :P

Je souhaite juste le champ email, car j’ai besoin que de ce champ et ça m’évite de recréer un FormType ^^

+0 -0

Tu ne réponds pas à mes questions, à savoir ce que tu veux faire de ces données et à quoi sert ce formulaire…

Un des buts des FormTypes, c’est justement d’être dépendants du contexte d’utilisation, et non pas uniquement de comment sont les données "en-dessous".

+1 -0

Le premier formulaire ContactType (avec sujet, message, prenom, email), il sert à me contacter, et le second ContactHomeType (avec mail) il sert simplement à envoyer un mail avec des informations, mais j’ai besoin du FormType, pour la sécurité par exemple, et je passe aussi via le Controller.

Donc, au lieu d’avoir deux Type, je veux simplement utiliser le même, tout en désactivant les form_row inutile, car j’utilise le même champ (email).

+0 -0

J’imagine que ton ContactType a tous les champs obligatoires. Ton ContactHomeType, lui, n’a pas besoin des sujet, message et prénom, mais du fait que dans la classe tu as spécifié qu’ils étaient obligatoires, si tu utilises ContactType, ça ne passera pas parce que Symfony s’attendra à avoir des valeurs pour ces champs.

Qui plus est, tu ne veux pas nous dire quelles sont les informations qui vont transiter avec le mail par "ContactHomeType", mais si les champs ne sont pas disponibles dans la classe (de formulaire), tu ne pourras pas récupérer les données de ces champs d’une part, et d’autre part des champs qui ne sont pas dans le formulaire le feront planter parce que par défaut des champs qui n’y sont pas ne sont pas acceptés.

Si c’est pour un unique champ commun, réutiliser la même classe n’est pas une bonne idée, autant utiliser un formulaire à l’ancienne, y ajouter un jeton CSRF et vérifier explicitement le jeton dans l’action.

Note que si c’est pour faire transiter des données comme l’agent utilisateur, l’adresse IP ou d’autres trucs que tu as par JavaScript, tu aurais meilleur temps de les récupérer côté serveur et non par le formulaire. La source est la même, donc la fiabilité du canal est comparable.

+1 -0

En fait ce n’est pas que je ne veux pas vous dire quelles informations vont transitées, mais c’est que je ne sais pas trop quoi répondre, c’est juste un message avec un sujet, prénom et mail en champ, rien d’autre.

Donc, si j’ai compris, faut faire 2 FormType different, on ne peut pas désactiver des champs dans un FormType.

Merci pour ta réponse, ça m’a pas mal éclairé en tout cas ;)

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte