Symfony2 有可能表格动态生成 http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#cookbook-form-events-submitted-data.
然而,动态生成存在一个大问题嵌入表格根据用户提交的数据:
如果我使用 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 - 数据已标准化,因此 $event->getData() 返回
模型对象
还有更好的可能性:
您可以使用 FormEvents::POST_SUBMIT 但您需要将其附加到子表单字段 - 而不是整个子表单。
在这种情况下,您将能够:
- 获取标准化形式的所有 POST 数据(模型对象)
- 修改事件绑定后的表单字段
- 我们将根据 POST 数据自动设置字段值
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)