Bonjour à tous,
Commençant à être bien rôdé dans l'utilisation des composants de base mis à dispos par Symfony, j'ai besoin d'aller plus loin et de faire mes propres types de champs de formulaire.
Je vous explique mon problème:
Je dois générer un formulaire affichant une liste d'éléments sélectionnables (checkbox). Ces éléments sont issus d'une collection d'entités rattachée à la classe associée à mon formulaire. Jusqu'ici, c'est simple.... je rajoute un champ de type "entity", avec les options "multiple" et "expanded" à true.
Sauf que je ne veux pas que tous les éléments soient sélectionnables : en fonction de leur disponibilité je veux avoir la possibilité d'interdire la sélection (d'afficher un simple label).
J'ai donc vainement essayé de suivre la doc officielle sur la création de nouveaux type de formulaire, mais c'est du ultra-light. et je bloque!!
Voilà quand même la stratégie à laquelle j'ai pensé :
>> Créer un nouveau type de champ dont le parent est "entity" (getParent())
>> Transmettre les entités sur lesquels je vais travailler via l'attribut "query_builder"
>> Analyser la disponibilité des données dans "BuildView()", créer une variable tableau pour ma vue qui agrège les couples entité/disponibilité
Q : Est-ce que je peux accéder au repository dans mon BuildView pour travailler sur le query_builder passé en option?
Est-ce bien à cet endroit que je dois le faire ?
>> Publier le champ en tant que service
>> Modifier le template twig du type champ "entity" pour l'adapter à mon propre type de champ (Parcours du tableau transmis à la vue dans BuildView. en fonction de la dispo : checkbox ou simple texte HTML)
Q : Où puis-je trouver des informations complètes sur les liens entre les types de champs standards et leur template associé ?
J'ai cherché dans form_div_layout.html.twig mais le widget du type "choice>expanded" sur lequel semble se baser le type de champ 'entity' ressemble à ça :
... et je ne vois pas le rapport : Est-ce dans form_widget(child) qu'ils définissent les input "checkbox" ? Où trouver de la doc sur cette notion de formulaire fils ? Avez-vous une idée de comment ça fonctionne ? J'ai un peu l'impression d'avoir raté un gros morceau du fonctionnement des formulaires ??!!..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 {% block choice_widget_expanded %} {% spaceless %} <div {{ block('widget_container_attributes') }}> {% for child in form %} {{ form_widget(child) }} {{ form_label(child) }} {% endfor %} </div> {% endspaceless %} {% endblock choice_widget_expanded %}
Voilà, si vous pouviez m'indiquer :
1. Si je délire complétement dans ma stratégie de dév et s'il n'y a pas plus simple
2. Si vous avez une réponse aux quelques questions posées plus-haut
... ça serait génial, ça m'éviterait de détourner symfony pour me taper le formulaire à la mano à l'ancienne...
Merci d'avance,
Adrien
Partager