我有一个包含项目集合的简单表单。就像这里描述的那样: http://symfony.com/doc/current/cookbook/form/form_collections.html
问题是当我添加新元素(或多个元素)而没有触及其中的内容(不改变它们的输入)时,我得到一个空集合。
我希望获得一系列添加的元素,无论其内容如何。即使theris字段是空的,也没关系。
在我提交表格后,我有:
var_dump($request->get('my_form_name'));
/* dump result:
array (size=19)
...
'partners' =>
array (size=1)
0 =>
array (size=2)
'fullname' => string '' (length=2)
'manager' => string '' (length=0)
...
*/
var_dump($form->getData()->getPartners());
// EMPTY!!! WTF? I expect an array of 1 element of Partner class which fields are set to '' and ''
另一方面,如果设置了somethig,则表示没问题:
var_dump($request->get('my_form_name'));
/* dump result:
array (size=19)
...
'partners' =>
array (size=1)
0 =>
array (size=2)
'fullname' => string ' NAME HERE ' (length=2)
'manager' => string '' (length=0)
...
*/
var_dump($form->getData()->getPartners());
// ok, we have an array of 1 element which is an object of Partner class
任何想法如何摆脱那个错误?
/////////修订///////// 合作伙伴的类映射是:
Bundle\Entity\Partner:
...
fields:
fullname:
type: string
lenght: 255
nullable: True
manager:
type: string
lenght: 255
nullable: True
manyToOne:
owner:
targetEntity: Step2
inversedBy: partners
joinColumn:
name: owner_id
referencedColumnName: id
field'合作伙伴'添加到' Step2'的形式实体喜欢'集合'与' allow_add',' allow_delete',' by_reference' = false
答案 0 :(得分:1)
您需要将第二个参数传递给submit()
方法false
。它会告诉Form组件,提交空数据不得更改任何现有数据。
$form->submit($request->get('my_form_name'), false);
答案 1 :(得分:0)
我必须在子表单(合作伙伴类)中设置empty_data
。
我不明白为什么,但是当相关类(合作伙伴)的所有字段都提交为""
(空)时,那么在类sumbit
的方法Symfony\Component\Form\Form
中
if (FormUtil::isEmpty($viewData)) {
$emptyData = $this->config->getEmptyData();
if ($emptyData instanceof \Closure) {
/* @var \Closure $emptyData */
$emptyData = $emptyData($this, $viewData);
}
$viewData = $emptyData;
}
在$ null
中为空字段的合作伙伴提供viewData
。对于提交为合作伙伴的对象,其中至少有一个字段为空$viewData
是必需对象。
所有这一切都是因为
$this->config->getEmptyData()
对于空对象Closure
最终会产生null
,但对于Partner
且至少有一个字段不为空,它会提供直接需要的对象。