Un DataTransfomer dans un EventSubscriber ne va pas
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
Code:
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 subscriber
Code:
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')));
}
}
} |
Mon data transformer
Code:
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;
}
} |
Merci