(Symfony \ Form)阻止自动生成表单字段

时间:2015-09-15 11:36:23

标签: symfony twig

我有一个树枝模板。它遍历表单集合(form.MeteringCodes)。问题是,我只需要显示一个字段的值,当我不明确地使用“form_row(...)”时, symfony会在表单的末尾自动生成字段

    {{ form_start(form) }}
...
            <tbody>
                {% for metCode in form.MeteringCodes %}
                    {{ form_row(metCode.id) }}
                <tr>
                    <td>{{ metCode.desc.vars.value }} {# <-- Here is the pure value #}</td>
                    <td>{{ form_row(metCode.sdesc) }}</td>
                    <td style="width:20%;">{{ form_row(metCode.type) }}</td>
                    <td style="width:15%;">{{ form_row(metCode.state) }}</td>
                </tr>
                {% endfor %}
             </tbody>
...
        {{ form_end(form) }}

我看到两种方式。一种是禁用这种“自动生成”行为。第二种可能是,如果我只是从原始对象本身获取值,而不将其定义为字段(如果可能的话)。

集合类型本身:

class MeteringCodeType extends \Symfony\Component\Form\AbstractType
{
    public function buildForm(\Symfony\Component\Form\FormBuilderInterface $builder, array $options)
    {
        $builder->add('id', 'hidden');
        $builder->add('desc', 'text', ['label' => false, 'disabled' => true]);
        $builder->add('sdesc', 'text', ['label' => false]);
        $builder->add('type', 'choice', ['choices'  => array('L' => '...', 'D' => '...', 'N' => '...'), 'label' => false]);
        $builder->add('state', 'text', ['label' => false]);
    }

    public function configureOptions(\Symfony\Component\OptionsResolver\OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'app\models\MeteringCode',
        ));
    }

    public function getName()
    {
        return 'MeteringCode';
    }
}

我不想使用隐藏字段之类的解决方法。

3 个答案:

答案 0 :(得分:9)

您可以将其他参数传递给form_end()来电:

{{ form_end(form, {'render_rest': false}) }}

希望这会有所帮助......

答案 1 :(得分:1)

大家好。我找到了解决方案。 我从表单本身中删除了该字段,并通过原始对象的getter访问该值。另一个好处是该字段根本不需要渲染。

  

{{metCode.vars.value.getDesc()}}

答案 2 :(得分:1)

很好的方法@Sergey Bratenkov我希望它以只读模式显示文本字段,因为我的字段是实体字段。这就是我用过的东西

<input type="text" value="{{ formulario.vars.value.getJuego() }}" readonly="readonly"/>

{% do formulario.juego.setRendered %}

使用setRendered功能,告诉twig在使用form_start后自动停止渲染字段。