SYMFONY表格事件 - >更改PRE SUBMIT事件的提交数据? /在SUBMIT

时间:2016-05-26 11:49:15

标签: forms symfony-forms symfony

我的目标:我有一个SYMFONY FORM,其字段应为disabled:true。当表单被提交时,具有属性disabled:true的字段不会在表单中发送,并且因此在成功提交后(字段中的值为空),它不会出现在表单上。

我读到我可以使用readonly:true属性,但它不适合(我喜欢我的只读在屏幕上用灰色背景识别)。

所以我去了SYMFONY FORM EVENTS:我做了一些阅读并改变了MyEntityType Class:

class MyEntityType extends AbstractType {
   public function buildForm(FormBuilderInterface $builder, array $options){

         $builder>add('....',....,array(...));
         $builder>add('email',EmailType::class,array('attr'=>array('disabled'=>true,'readonly'=>true)));
         $builder->add('submit',SubmitType::class,array('label'=>'Submit'));

         $builder->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event){
              $formToAlter = $event->getForm();
              $viewData = $event->getForm()->getViewData();
              $data = $event->getData();
              dump($event);
              dump($viewData);
              dump($data);
              $formToAlter->add('email',EmailType::class,array('attr'=>array('readonly'=>true,'data'=>$viewData->getEmail())));
             });

      }

...other AbstractType functions...

}

在与PRE_SUBMIT事件绑定的Listener函数中有一些实验。

我认为我可以在PRE_SUBMIT事件中删除disabled:true属性并使字段EMAIL中的值通过FORM,以便使用我的原始值再次填写字段EMAIL在所有SUBMIT过程结束后。

我注意到,$event->getData()是表单的SUBMITED字段的数组,因此,在那一点(在PRE_SUBMIT事件中),在该数组中我找不到我的EMAIL,它已经是丢弃,因为该字段具有属性disabled:true。我想也许我可以更改$event->getData()的数组值以强制将disabled:true显示的字段中的值整合,但我不知道该怎么做。

我也尝试对POST_SET_DATA事件采取行动,如:

  $builder->addEventListener(FormEvents::POST_SET_DATA, function(FormEvent $event){
      $formToAlter = $event->getForm();
      $formToAlter->add('email',EmailType::class,array('attr'=>array('readonly'=>true)));
  });

但它确实在SUBMIT之前显示没有属性disabled:true的字段EMAIL。

因此我不知道因为 POST_SET_DATA看起来太早了,而且PRE_SUBMIT似乎迟到才能控制我想要的东西

有没有人有线索?

0 个答案:

没有答案