Symfony preSubmit()然后onSubmit()

时间:2019-01-17 09:24:50

标签: symfony

我更新了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']);
}

1 个答案:

答案 0 :(得分:0)

嗯,表单组件确实非常复杂。在表单处理期间,共有三种类型的数据-模型数据,规范化数据和视图数据。另外,对于PRE_SUBMIT事件,还有请求数据。

根据我们正在谈论的事件,可能还会有其他数据传递到事件侦听器。根据{{​​3}}做:

  • FormEvents::PRE_SUBMIT事件具有请求数据
  • FormEvents::SUBMIT事件具有标准化数据

因此,当您在PRE_SUBMIT的请求数据中取消设置某些内容时,就像从未将其传递给表单一样。但这并不意味着在默认情况下Form Component documentation处理该数据之后,该数据将不会在模型/规范化/视图数据中稍后出现。

很难为您提供确切的解决方案,因为这取决于您要实现的目标。但是我要说的是,如果您想修改数据处理方式,则可能应该使用Data Transformers而不是Form Events。