Я использую прослушиватели событий для динамического изменения формы. Я хочу добавить еще один прослушиватель событий в поле, которое было добавлено динамически. Я не уверен, как это сделать.
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('first_field','choice',array(
'choices'=>array('1'=>'First Choice','2'=>'Second Choice')
));
$builder->addEventListener(FormEvents::PRE_SET_DATA, array($this, 'preSetData'));
$builder->get('first_field')->addEventListener(FormEvents::POST_SUBMIT, array($this, 'postSubmit'));
}
public function preSetData(FormEvent $event)
{
$form = $event->getForm();
$form->add('second_field','choice',array(
'choices'=>array('1'=>'First Choice','2'=>'Second Choice')
));
//Some how add an event listener to this field
}
public function postSubmit(FormEvent $event)
{
$form = $event->getForm()->getParent();
$form->add('second_field','choice',array(
'choices'=>array('1'=>'First Choice','2'=>'Second Choice')
));
//Some how add an event listener to this field
}
Я попытался просто использовать $builder
в функции buildForm
, чтобы добавить прослушиватель событий в second_field
, но поскольку поле не существует при первоначальном создании формы, оно выдает ошибку.
Если я попытаюсь добавить новый прослушиватель событий внутри первого прослушивателя событий, выполнив следующие действия:
$form->get('second_field')->addEventListener(...)
Затем я получаю сообщение об ошибке:
Call to undefined method Symfony\Component\Form\Form::addEventListener()
Любые предложения будут приветствоваться.