我的项目要求我在保留数据库结构的同时重建大型系统的功能(出于历史记帐的原因)。我从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”的方法“现有”不存在
我尝试了各种可能性,包括.get()和迭代.choices()[最终给我的ChoiceView对象,然后我不能使用form_widget()]输出。我已经尝试制作一个自定义类型封装一个单选按钮加上相关的设置字段,但是由于元素名称的创建方式,我不能让它们互相排斥。我还尝试制作一个更复杂的Type来表示选项和相关字段,但又一次无法在类型模板中访问和呈现特定选项。
理想情况下,我希望API中的某些内容我只是忽略了,可以找到/替换并使其正常工作。否则,我们将非常感谢有关Symfony友好方法的建议(或链接)。
答案 0 :(得分:3)
&#39; ave面临类似的情况,并以这种方式解决:
<li>
{{ form_widget(form.myRadioField.children[0]) }}
</li>
<li>
{{ form_widget(form.myRadioField.children[1]) }}
</li>
这绝不是干净,可重复使用的最佳实践代码,但它确实有效。
答案 1 :(得分:0)
你有没有试过像:
<ul>
<li>
{{ form_widget(form['settings_group']['existing']) }}
[ .. dropdown ..]
</li>
<li>
{{ form_widget(form['settings_group']['override']) }}
[ .. text input .. ]
</li>
</ul>