Personnaliser le rendu d'un champ "Entity" d'un formulaire Symfony2
Le rendu de base des champs de formulaire sous Symfony2 est bien, mais rencontre malheureusement quelques limites.
Par exemple, je souhaite permettre à des utilisateurs de sélectionner un ou plusieurs logements en cochant les cases correspondantes (champs de type "checkbox"). De "base", je n'arrivais qu'à afficher des checkbox précédées du numéro de l'appartement. Je souhaite plutôt afficher un tableau avec numéro, étage, catégorie, etc.
Pour cela, je suis parti de ce post de Stack Overflow et du cookbook créer un champ de formulaire personnalisé
En gros, le principe est le suivant :
- créer un type de champ (dans le dossier Form/Type du Bundle) - attention, le post de Stack Overflow est légèrement obsolète à ce niveau, il faut remplacer les FormBuilder par des FormBuilderInterface. J'ai aussi supprimé la ligne de la méthode buildView.
- déclarer ce type de champ comme un service - il s'agit du fichier services.yml dans le dossier config du Bundle (Resources/config)
- utiliser ce type de champ dans le formulaire - personnellement, je les "externalise" tous, la plupart me servant aussi bien à l'édition qu'à la création
- personnaliser enfin le rendu dans la vue twig - là encore, j'utilise un fichier fields.html.twig dans lequel j'ai regroupé toutes mes "personnalisations". J'ai personnalisé le widget correspondant à mon nouveau type. Admettons que celui-ci s'appelle toto (il s'agit de son alias dans services.yml), alors le block du widget s'appellera toto_widget.
Les deux liens que j'ai mis explicitent la plupart des détails, je voulais surtout rectifier le post de Stack Overflow en ce qui concerne la syntaxe.