Sujet déplacé dans la catégorie Symfony 2
Bonsoir à tous,
J'ai déjà posé cette question sur deux autres forum connu, mais personne ne semble être en mesure de m'aider alors que ce problème me semble basique, limite " cas d'école ". :/
Je souhaite réaliser un formulaire imbriqué, la manière la plus simple qu'il soit : j'ai une entité "cabinet", laquelle doit imbriquer une "version". A terme, il y aura plusieurs versions mais ce formulaire la doit n'en ajouter qu'une seule, la première. J'ai donc fait ceci :
Formulaire Cabinet :
Formulaire version :
Dès que j'affiche le formulaire, j'ai cette erreur qui est renvoyée : "The form's view data is expected to be an instance of class LogicielBundle\Entity\CabinetVersion, but is an instance of class Doctrine\Common\Collections\ArrayCollection. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms an instance of class Doctrine\Common\Collections\ArrayCollection to an instance of LogicielBundle\Entity\CabinetVersion."
Je comprends bien qu'il me demande de mettre data_class à null ; d'ailleurs quand je le fait le formulaire s'affiche, mais dans ce cas je casse la relation à l'entité il me semble. :/
J'ai regardé sur les forums, certains préconisent d'utiliser un formulaire de type collection + javascript mais ça ne semble pas adapté, puisque je ne souhaite ajouter qu'une seule version, ce serait dommage d'utiliser du javascript pour ça.
A titre informatif, voici l'entité Cabinet :
Et enfin l'entité CabinetVersion :
Merci beaucoup à ceux qui pourront m'aider / m'éclairer :)
2 réponses
Bonjour, il s'agit d'une relation OneToMany
En écrivant : ->add('versions', new CabinetVersionType()), tu n'as qu'un seul formulaire.
Voici comment va agir symfony :
il voit le champ versions.
Il va récupérer les données en utilisant par défaut le getVersions()
Que te renvoie getVersions ? Un ArrayCollection (vide ou contenant des CabinetVersion.)
Du coup, tu devineras qu'il n'arrivera pas à remplir ton formulaire CabinetVersionType, étant donné que tu as une liste et pas un seul élément. Il faudrait plusieurs formulaires CabinetVersionType.
Si tu as une relation oneToMany, il faut t'orienter vers un form embed.
->add('versions', 'collection', array('type' => new CabinetVersionType())