我尝试使用FormEvents::PRE_SUBMIT
从AbstractType自定义类中的EventListener获取数据,但数据返回空字段,如果我使用FormEvents::SUBMIT
,字段获取数据,但我无法添加字段。
你知道为什么$form->getData()
会返回空字段吗?
我的课程是:
class RegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('extra', ExtraType::class, array(
'data_class' => ExtraForm::class
))
->add('sales', SalesType::class, array(
'data_class' => SalesForm::class
));
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$form = $event->getForm();
$data = $form->getData();
//Fields in data are empty
echo '<pre>';
print_r( $data );
echo '</pre>';
/*
Example:
AppBundle\Entity\User Object
(
[id:protected] =>
[userType:protected] =>
[sales:protected] =>
[extra:protected] =>
[username:protected] =>
[usernameCanonical:protected] =>
[email:protected] =>
)
*/
//CODE
});
}
//CODE
}
谢谢!
答案 0 :(得分:1)
这是因为在将数据提交给表单之前调用了PRE_SUBMIT
。这就是$form->getData()
在触发PRE_SUBMIT
时为空的原因。 The doc says:
在
FormEvents::PRE_SUBMIT
方法的开头调度Form::submit()
事件。它可以用于:
- 在将数据提交到表单之前更改请求中的数据;
- 在将数据提交到表单之前添加或删除表单字段。
如果要访问数据,则需要直接在发送到事件处理程序的FormEvent
参数中进行访问。在您的情况下是$event->getData()
。