加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Symfony2:动态生成嵌入式表单

发布时间:2020-12-13 18:09:46 所属栏目:PHP教程 来源:网络整理
导读:Symfony2的可能性为 forms dynamic generation. 但是,基于用户提交的数据动态生成嵌入表单存在很大问题: 如果我使用FormEvents :: PRE_SET_DATA,那么我无法接收嵌入表单的发布数据 – 只有父对象数据可用 $builder-get('contacts')-addEventListener( FormE
Symfony2的可能性为 forms dynamic generation.

但是,基于用户提交的数据动态生成嵌入表单存在很大问题:

如果我使用FormEvents :: PRE_SET_DATA,那么我无法接收嵌入表单的发布数据 – 只有父对象数据可用

$builder->get('contacts')->addEventListener(
  FormEvents::POST_SET_DATA
  function(FormEvent $event) {
    $data = $event->getData(); //$data will contain embedded form object - not the data object!
  }
);

如果我使用FormEvents :: POST_SUBMIT,那么我可能会收到数据,但我无法修改表单

$builder->get('contacts')->addEventListener(
  FormEvents::POST_SUBMIT,function(FormEvent $event) {
    $data = $event->getData(); //$data will contain filled data object - everything is ok
    $form = $event->getForm(); //form will be ok
    if ($data->getSomeValue()) {
      $form->add(...); //Error: "You cannot add children to a submitted form"
    }
  }
);

请帮助:有没有办法根据用户提交的数据动态生成嵌入式表单?

我使用Symfony 2.4.

非常感谢你提前!

问题很容易解决:需要使用FormEvents :: SUBMIT或FormEvents :: PRE_SUBMIT事件.

对于它们两者,可以获取提交数据并更改表单.

他们之间的区别:

> FormEvents :: PRE_SUBMIT – 数据未规范化,因此$event-> getData()
返回简单数组
> FormEvents :: SUBMIT – 数据是NORMALIZED,因此返回$event-> getData()
模型对象

而且还有更好的可能性:

您可以使用FormEvents :: POST_SUBMIT但是您需要将它附加到子表单字段 – 而不是整个子表单.

在这种情况下,您将能够:

>以标准化形式获取所有POST数据(模型对象)>修改表单字段,该字段位于绑定了哪个事件的字段之后>字段值我们将根据POST数据自动设置

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读