Symfony2:嵌入式动态生成 [英] Symfony2: dynamic generation of embedded form
问题描述
Symfony2有可能表单动态
然而,基于用户提交的数据,嵌入式表单 的动态生成存在很大问题:
如果我使用FormEvents :: PRE_SET_DATA,则我无法接收嵌入表单的帖子数据 - 只有父对象数据可用
$ builder-> get('contacts') - > addEventListener(
FormEvents :: POST_SET_DATA
函数(FormEvent $ event){
$ data = $ event-> getData(); // $ data将包含嵌入的表单对象 - 不是数据对象!
}
);
如果我使用FormEvents :: POST_SUBMIT,那么我可能会收到数据,但是我不能修改表单
$ builder-> get('contacts') - > addEventListener(
FormEvents :: POST_SUBMIT,
函数(FormEvent $ event){
$ data = $ event-> getData(); // $ data将包含填充的数据对象 - 一切都ok
$ form = $ event-> getForm (); // form将会ok
if($ data-> getSomeValue()){
$ form-> add(...); //错误:你不能添加子提交表单
}
}
);
请帮助:有没有办法根据用户提交的数据动态生成嵌入式表单?
我使用Symfony 2.4。
提前非常感谢!
问题很容易解决:需要使用FormEvents :: SUBMIT或FormEvents :: PRE_SUBMIT事件。
<对于他们来说,可以获得提交数据并更改表单。
它们之间的区别:
- FormEvents :: PRE_SUBMIT - 数据不正则化,所以$ event-> getData()
返回简单数组 - FormEvents :: SUBMIT - 数据是NORMALIZED,所以$ event-> getData()返回
模型对象
还有更好的可能性:
您可以使用FormEvents :: POST_SUBMIT但是您需要将其附加到子窗体字段 - 而不是整个子表格。
在这样的c您可以:
- 以规范化形式(模型对象)获取所有POST数据
- 修改绑定事件之后的表单字段
- 字段值将根据POST数据自动设置
Symfony2 has possibility of forms dynamic generation.
However there is big problem with dynamic generation of embedded forms based on user submitted data:
If I use FormEvents::PRE_SET_DATA then I can't receive post data for embedded form - only parent object data is available
$builder->get('contacts')->addEventListener(
FormEvents::POST_SET_DATA
function(FormEvent $event) {
$data = $event->getData(); //$data will contain embedded form object - not the data object!
}
);
If I use FormEvents::POST_SUBMIT then I may receive data but I can't modify form
$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"
}
}
);
Please help: is there any way to dynamically generate embedded form based on user submitted data?
I use Symfony 2.4.
Thank you very much in advance!
The problem was easy to solve: it is needed to use FormEvents::SUBMIT or FormEvents::PRE_SUBMIT events.
For both of them it is possible to get submit data and to change the form.
The difference between them:
- FormEvents::PRE_SUBMIT - data is not normalized, so $event->getData() returns simple array
- FormEvents::SUBMIT - data is NORMALIZED, so $event->getData() returns model object
And there is even better possibility:
You may use FormEvents::POST_SUBMIT BUT you need to attach it to the subform field - not to the whole subform.
In such case you'll be able to:
- Get all POST data in normalized form (model object)
- Modify form fields which goes after one to which event is bound
- Fields values we'll be automatically set based on POST data
这篇关于Symfony2:嵌入式动态生成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!