Bonjour,
Je n'arrive pas à faire fonctionner mon dataTransformer dans mon subscriber
lorsque je veux affiche mon champ {{form_row(form.tuteur), j'ai comme erreur que la méthode form.tuteur n'existe pas
pourtant je l'ajoute bien à mon form
voici mon code
mon formulaire
Mon subscriber
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <?php class EnfantTuteurType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $entityManager = $options['em']; $builder->addEventSubscriber(new EnfantTuteurFieldSubscriber($entityManager, $builder)); } }
Mon data transformer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 <?php class EnfantTuteurFieldSubscriber implements EventSubscriberInterface { private $entityManager; private $builder; public function __construct($entityManager, FormBuilderInterface $builder) { $this->entityManager = $entityManager; $this->builder = $builder; } public static function getSubscribedEvents() { return array( FormEvents::PRE_SET_DATA => 'OnPreSetData', ); } /** * * @param \Symfony\Component\Form\FormEvent $event */ public function OnPreSetData(FormEvent $event) { $enfant_tuteur = $event->getData(); //Symfony\Component\Form\Form $form = $event->getForm(); $transformer_enfant = new EnfantToNumberTransformer($this->entityManager); $transformer_tuteur = new TuteurToNumberTransformer($this->entityManager); //new if (!$enfant_tuteur || null === $enfant_tuteur->getId()) { $this->builder->add( $this->builder->create('enfant', 'hidden') ->addModelTransformer($transformer_enfant)); $this->builder->add( $this->builder->create('tuteur', 'hidden') ->addModelTransformer($transformer_tuteur)); $form->add('autocompletion', 'text', array( 'mapped' => false, 'label' => ' ', 'required' => true, 'attr' => array( 'class' => 'form-control', 'placeholder' => 'Nom'))); } //on edit else { $form->add('relation', null, array('label' => 'Relation (Père, mère, belle-mère...)', 'attr' => array('class' => 'form-control'))); $form->add('ordre', null, array('attr' => array('class' => 'form-control'))); } } }
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 class TuteurToNumberTransformer implements DataTransformerInterface { /** * @var ObjectManager */ private $om; /** * @param ObjectManager $om */ public function __construct(ObjectManager $om) { $this->om = $om; var_dump(123); } /** * Transforms an object (enfant) to a string (number). * * @param Menage|null $tuteur * @return string */ public function transform($tuteur) { var_dump($tuteur); if (null === $tuteur) { return ""; } return $tuteur->getId(); } /** * Transforms a string (number) to an object (enfant). * * @param string $number * * @return Menage|null * * @throws TransformationFailedException if object (enfant) is not found. */ public function reverseTransform($number) { var_dump($number); if (!$number) { return null; } $tuteur = $this->om ->getRepository('EnfanceMercrediBundle:Tuteur') ->findOneBy(array('id' => $number)) ; if (null === $tuteur) { throw new TransformationFailedException(sprintf( 'An Tuteur with number "%s" does not exist!', $number )); } return $tuteur; } }
Partager