Symfony2.1: Adding (and/or Removing) fields using Event Subscribers
src/Bundle/Form/Type/NewsType.php
class NewsType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('body')
;
$subscriber = new AddExpiresAtFieldSubscriber($builder->getFormFactory());
$builder->addEventSubscriber($subscriber);
}
// ...
}
src/Bundle/Form/EventListener/AddExpiresAtFieldSubscriber.php
class AddExpiresAtFieldSubscriber implements EventSubscriberInterface
{
private $factory;
public function __construct(FormFactoryInterface $factory)
{
$this->factory = $factory;
}
public static function getSubscribedEvents()
{
return array(FormEvents::PRE_SET_DATA => 'preSetData');
}
public function preSetData(FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
if (null === $data) {
return;
}
// if is not new (updating data) add the field
if ($data->getId()) {
$form->add($this->factory->createNamed('expires_at', 'datetime', null, array(
'input' => 'datetime',
'widget' => 'single_text',
'format' => 'dd/MM/yyyy HH:mm'
)));
}
}
}
And in case you having trouble adding or removing a field:
https://github.com/symfony/symfony/pull/4552#issuecomment-6809655
Written by Andréia Bohner
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Php
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#