我更新了presubmit()上的数据
public function onPreSubmit(FormEvent $event) {
$data = $event->getData();
unset($data['test']);
$event->setData($data);
}
当我在函数preSubmit()的末尾转储dump($event->getData())
时,所有数据都可以。但是,当我尝试在onSubmit()
函数中获取数据时,数据将被重置...
public function onSubmit(FormEvent $event) {
$data = $event->getData();
}
键"test"
仍然存在...怎么可能?
在我的buildForm()函数中,存在事件:
public function buildForm(FormBuilderInterface $builder, array $options) {
...
...
$builder->addEventListener(FormEvents::POST_SET_DATA, [$this, 'onPostSetData']);
$builder->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'onPreSubmit']);
$builder->addEventListener(FormEvents::SUBMIT, [$this, 'onSubmit']);
}
答案 0 :(得分:0)
嗯,表单组件确实非常复杂。在表单处理期间,共有三种类型的数据-模型数据,规范化数据和视图数据。另外,对于PRE_SUBMIT
事件,还有请求数据。
根据我们正在谈论的事件,可能还会有其他数据传递到事件侦听器。根据{{3}}做:
FormEvents::PRE_SUBMIT
事件具有请求数据 FormEvents::SUBMIT
事件具有标准化数据 因此,当您在PRE_SUBMIT
的请求数据中取消设置某些内容时,就像从未将其传递给表单一样。但这并不意味着在默认情况下Form Component documentation处理该数据之后,该数据将不会在模型/规范化/视图数据中稍后出现。
很难为您提供确切的解决方案,因为这取决于您要实现的目标。但是我要说的是,如果您想修改数据处理方式,则可能应该使用Data Transformers而不是Form Events。