【发布时间】:2012-03-28 11:54:00
【问题描述】:
我正在关注教程How to Dynamically Generate Forms Using Form Events。我被困在AddNameFieldSubscriber的创建上:
$subscriber = new AddNameFieldSubscriber($builder->getFormFactory());
我的问题很简单:FormFactory 如何访问和修改以前由$builder 创建的任意表单字段?为什么我们要传递 FormFactory 而不是 $builder 本身?
假设我们在 builder 中只有两个字段(“名称”和“价格”):
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
}
}
【问题讨论】:
标签: symfony symfony-forms