直接从Twig中的ChoiceType元素访问特定选项

End*_* B. 7 php symfony

我的项目要求我在保留数据库结构的同时重建大型系统的功能(出于历史记帐的原因).我从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
        )
    );
Run Code Online (Sandbox Code Playgroud)

在我的Twig模板中,我的标记是这样的:

    <ul>
        <li>
            {{ form_widget(form.settings_group.existing) }}
            [ .. dropdown ..]
        </li>
        <li>
            {{ form_widget(form.settings_group.override) }}
            [ .. text input .. ]
        </li>
    </ul>
Run Code Online (Sandbox Code Playgroud)

它完美地适用于我需要做的事情,因为单选按钮"现有"或"覆盖"将确定哪些字段被保留以及哪些字段在保存实体时被重置.具体来说,我的问题出现了,因为我想在下一个单选按钮之前手动分离单选按钮并输出各种其他表单字段.基于现有功能和数据库,它是该系统中多种形式的重复模式.

升级到Symfony 2.1后,这不再可能,我收到一个错误:

对象"Symfony\Component\Form\FormView"的方法"existing"不存在

我已经尝试了各种可能性,包括.get()和迭代.choices()[最终给我的ChoiceView对象,然后我不能使用form_widget()]输出.我已经尝试制作一个自定义类型封装一个单选按钮加上相关的设置字段,但是由于元素名称的创建方式,我不能让它们互相排斥.我还尝试创建一个更复杂的Type来表示选项和相关字段,但是再次无法访问并在类型模板中呈现特定选项.

理想情况下,我希望API中的某些东西我只是忽略了,可以找到/替换并使其正常工作.否则,我们将非常感谢有关Symfony友好方法的建议(或链接).

Rui*_*lho 0

你有没有尝试过类似的事情:

<ul>
    <li>
        {{ form_widget(form['settings_group']['existing']) }}
        [ .. dropdown ..]
    </li>
    <li>
        {{ form_widget(form['settings_group']['override']) }}
        [ .. text input .. ]
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)