2
我正在按照教程How to Dynamically Generate Forms Using Form Events。我卡上创建AddNameFieldSubscriber
:在Symfony2中从订阅者(表单事件的)访问表单字段
$subscriber = new AddNameFieldSubscriber($builder->getFormFactory());
我的问题很简单:如何FormFactory
可以访问和修改以前由$builder
创建任意表单字段?为什么我们通过FormFactory
而不是$builder
本身?
假设我们在建设者只有两个字段( “name” 和 “价格”):
class ProductType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$subscriber = new AddProductTypeSubscriber($builder->getFormFactory());
$builder->addEventSubscriber($subscriber);
$builder->add('name');
$builder->add('price');
}
public function getName() { return 'product'; }
}
我想在用户设置required = false
(只是一个例子):
class ProductTypeSubscriber 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(DataEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
if (null === $data) return;
// Access "name" field and set require = false
}
}
这也是我的恐惧。我会进一步调查,但我认为一样... – Polmonino 2012-03-12 13:52:35
你有没有找到一种方法来做到这一点? – d0001 2013-09-17 00:03:37