嵌入式集合的嵌入式集合 - isValid问题

时间:2015-12-03 12:02:54

标签: symfony

让我们说我有一个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

1 个答案:

答案 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 =   空

找不到foobarindex = 0级别的字段,并且错误已附加到其父级(集合)。

因此,当我向集合添加多个元素时,我看到的每个错误都与“其他”字段相关(以n-1方式)。

我如何发现此错误

使用分析器>表单,在左列上,您可以找到附加了错误的所有表单字段。观察索引,你可以找到我在说什么。