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