这是在Symfony2.4上的:
我正在尝试(在单元测试中)测试表单中某些字段的存在,这些字段应该由事件侦听器动态添加。根据传递给表单的数据,某些字段应该存在,而其他字段不在一个案例中,而在另一个案例中则不同。
表单本身是正确的,它确实按预期工作(看似)。
我的表格课程' MyFormType::buildForm()
方法大致是:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', null, array(
'label' => 'name'
));
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event)
$form = $event->getForm();
$data = $event->getData();
if ($data->getSomeField() === 123) {
$form->add('field1');
} else {
$form->add('field2');
}
});
}
在单元测试中,我得到一个表单并设置一些数据(将数据传递给create()
方法没有任何区别):
$this->form = $this->getService('form.factory')->create(new MyFormType(), null, array('csrf_protection' => false));
$this->form->setData($data);
在此之后我尝试转储$this->form->all()
以查看动态添加的字段是否存在,但它们不存在。
$this->assertTrue($this->form->has('field1'));
也失败了。
我错过了哪些想法,或者为了拥有一个完全初始化的表单(所有相关的事件监听器都已执行且所有字段都存在,动态添加与否),我应该做些什么?