Hello,
J’ai un petit souci de compréhension des Forms de Symfony je pense :
Le code actuel côté Entity (pas de problème de ce côté là) :
J’ai une relation OneToMany / ManyToOne : Entity User ==> Entity UsersIndicators <== Entity Indicator.
(Note : J’ai une clé primaire composite sur UsersIndicators sur les propriétés $user
et $indicator
).
L’Entity UsersIndicators
possède des champs supplémentaires comme $color
et $displayed
.
Mon problème côté formulaire
J’ai besoin d’avoir un formulaire, qui, pour un utilisateur donné, avoir une liste de ses indicateurs (propriété $userIndicators
de l’entity User
qui mappe vers UsersIndicators
). A côté de ses indicateur, pour chacun d’entres eux, une checkbox (boolean) pour savoir si oui ou non il veut l’afficher (propriété $displayed
de l’entité UsersIndicators
), ainsi qu’un selecteur de couleur (string) avec la propriété $color
de toujours la même entité UsersIndicators
.
A savoir que je ne veux pas qu’il puisse ajouter ou supprimer des indicateurs mais seulement jouer avec les propriétés qu’il y a en plus dans l’entité à savoir $color
et $displayed
.
Je m’y prend surement très mal mais j’ai essayé de créer un formType de UsersIndicators
, pour l’instant très simple, certe :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?php namespace App\Form; use App\Entity\UsersIndicators; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class UserCockpitParametersType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('user') // Clé primaire, on est d'accord que je peux la virer du formulaire ? ->add('indicator') // Clé primaire, on est d'accord que je peux la virer du formulaire ? ->add('color') ->add('displayed') ; } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => UsersIndicators::class, ]); } } ` |
mais dans mon Controller, lorsque je fais ça :
1 2 3 4 5 6 7 8 9 10 11 12 | <?php public function indexAction() { [...] $user = $userManager->getUserForPerformanceMilestone($id); $cockpitParametersForm = $this->createForm(UserCockpitParametersForm::class, $user->getUserIndicators()); [...] } ` |
J’ai le droit à cette exception :
The form’s view data is expected to be an instance of class App\Entity\UsersIndicators, but is an instance of class Doctrine\ORM\PersistentCollection. 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\ORM\PersistentCollection to an instance of App\Entity\UsersIndicators.
Symfony me dit que je devrais opter pour un ViewTransformer mais j’avoue être un peu perdu… Des pistes à me donner ?
Je vous remercie