让我们说我有一个FooType
BarType
(集合;级联验证设置为true),它本身有FooBarType
(集合;级联验证)设定为真)
所以
//FooType
$builder
[...]
->add('bar', 'collection', [
//...
'type' => new BarType()
'error_bubbling' => false,
'allow_add' => true,
'allow_delete' => true,
'required' => false,
'by_reference' => false,
]
);
//BarType
$builder
[...]
->add('fooBar', 'collection', [
//...
'type' => new FooBarType()
'error_bubbling' => false,
'allow_add' => true,
'allow_delete' => true,
'required' => false,
'by_reference' => false,
]
);
现在的问题是,如果我从GUI添加一个元素到fooBar
集合由于有效约束而无效,则错误附加到WHOLE集合(而不是集合的元素)字段)和元素声称有效(从分析器看到)。如果我从GUI添加多个元素到fooBar
集合仍然无效,则无效状态(错误)仍然附加到集合,第一个元素仍然声称有效但其他元素附加了错误(这就是我想要的)。
为什么会出现这种行为?有什么想法吗?
这是分析器
中显示的无效路径Object(Symfony \ Component \ Form \ Form).data.bar [0] .foobar [0] .fieldName = 空
获得了实际价值,但是"并列#34;收集而不是字段元素。
Symfony版本:2.7
答案 0 :(得分:0)
解决方案非常“简单”但很难找到。
我问自己,删除问题或直接回答是否更好。由于我很确定这个错误也可能发生在其他人身上并且“调查”并不那么容易,所以我决定回答。
错误是收集原型javascript及其索引。我在谈论
http://symfony.com/doc/current/cookbook/form/form_collections.html
addTagForm()
javascript函数,在我的情况下是自定义的,以达到我需要的。问题是我在索引计算上犯了一个错误,因此每个新集合都是从1而不是0开始。
因此,当表单验证组件尝试将错误附加到右侧字段时,生成此
Object(Symfony \ Component \ Form \ Form).data.bar [0] .foobar [0] .fieldName = 空
找不到foobar
级index = 0
级别的字段,并且错误已附加到其父级(集合)。
因此,当我向集合添加多个元素时,我看到的每个错误都与“其他”字段相关(以n-1方式)。
使用分析器>表单,在左列上,您可以找到附加了错误的所有表单字段。观察索引,你可以找到我在说什么。