为什么hasParent对于原型返回true而对于Symfony2集合表单中的集合元素为false?

时间:2012-11-06 12:56:00

标签: forms symfony collections parent-child

如何重现:

1。创建某种类型的集合

<?php

$builder->add('foo', 'collection', array(
  'type'            => new BarType(),
  'allow_add'       => true,
  'allow_delete'    => true,
  'by_reference'    => false,
  'prototype'       => true,
  'prototype_name'  => 'this_is_prototype',
  'options'         => array(
      'data_class' => 'Acme\FooBundle\Entity\Bar'
    ),
));

2。创建BarType

<?php 

class BarType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        var_dump(array(
            $builder->getForm()->getName() => $builder->hasParent()
        ));
        $builder->add('bar', 'text'); 
        // this actually is not relevant, just adding anything
        // so that bar form is not empty
    }
}

var_dump()

的结果

如果我们的集合包含3个Bar对象,那么结果将是:

array (size=1)
  'this_is_prototype' => boolean true

array (size=1)
  0 => boolean false

array (size=1)
  1 => boolean false

array (size=1)
  2 => boolean false

结论

buildForm $ builder - &gt; getParent()将仅为原型返回父构建器。

问题/问题

我需要访问父表单来获取一些参数。为什么父项被删除现有的集合元素?有没有解决方法?

Related github issue

1 个答案:

答案 0 :(得分:0)

bschussek:

  

答案是在调用buildForm()时,父节点   还不知道(记住我们只是在构建表格)。一个表格   不应该依赖于它的父母。相反,您应该添加选项   您的类型并从父级设置这些选项以修改行为   孩子。