首页 文章

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

提问于
浏览
7

我的项目要求我在保留数据库结构的同时重建大型系统的功能(出于历史记帐的原因) . 我从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友好方法的建议(或链接) .

2 回答

  • 0

    我遇到了类似的情况并以这种方式解决了这个问题:

    <li>
        {{ form_widget(form.myRadioField.children[0]) }}
    </li>
    <li>
        {{ form_widget(form.myRadioField.children[1]) }}
    </li>
    

    This is in no way clean, re-usable, best-practice code but it works.

  • 3

    你尝试过类似的东西:

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

相关问题