<?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'
),
));
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
}
}
如果我们的集合包含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()将仅为原型返回父构建器。
我需要访问父表单来获取一些参数。为什么父项被删除现有的集合元素?有没有解决方法?
答案 0 :(得分:0)
的 bschussek:强> 的
答案是在调用buildForm()时,父节点 还不知道(记住我们只是在构建表格)。一个表格 不应该依赖于它的父母。相反,您应该添加选项 您的类型并从父级设置这些选项以修改行为 孩子。