我的项目要求我重建一个大型系统的功能,同时保留数据库结构(出于历史计费原因)。我从Symfony 2.0.x开始,并已经开始升级到Symfony 2.1.2。
以前,我可以使用点符号直接访问Twig中单选按钮组(multiple = false,expanded = true)的各个选项。例如,在我的表单中,我定义了类似于这样的元素:
$builder->add('settings_group', 'choice', array(
'choices' => array(
'existing' => 'A pre-existing setting group',
'override' => 'Specify an override instead'
),
'multiple' => false, 'expanded' => true,
'property_path' => false
)
);
在我的Twig模板中,我的标记如下所示:
<ul>
<li>
{{ form_widget(form.settings_group.existing) }}
[ .. dropdown ..]
</li>
<li>
{{ form_widget(form.settings_group.override) }}
[ .. text input .. ]
</li>
</ul>
它完美地完成了我需要做的事情,因为单选按钮“现有”或“覆盖”将确定在保存实体时哪些字段被持久化,哪些字段被重置。具体而言,我的问题出在我想要手动分离单选按钮并在下一个单选按钮之前输出各种其他表单字段。基于现有功能和数据库,这是该系统中许多表单中的一种经常出现的模式。
升级到Symfony 2.1后,这不再可能,我会收到以下错误:
“Symfony\Component\Form\FormView”对象的方法“existing”不存在
我尝试过各种可能性,包括.get()和迭代.choices() [这最终给我不能使用form_widget()输出的ChoiceView对象]。我尝试制作一个自定义类型,封装一个单选按钮加上相关的设置字段,但由于元素名称的创建方式,我无法使它们相互排斥。我还尝试制作一个更复杂的类型,表示两个选项和相关字段,但再次无法访问和渲染类型模板中的特定选项。
理想情况下,我希望在API中找到我简单地忽略并且可以找到/替换并使其工作的东西。否则,建议或指向更适合Symfony的方法的链接将不胜感激。