如何使用多个字段值覆盖Symfony 2中的实体类型标签?

时间:2014-05-01 16:55:08

标签: forms symfony twig

我正在尝试在Symfony 2中创建自定义表单。我有一个实体字段类型,我正在尝试呈现为扩展/多重。每个实体的默认呈现类似于以下伪代码:

<input type="checkbox" value='$entity->id'><label>$entity->id</label>

这太可怕了。我想让symfony为每个实体呈现更详细的内容,如:

<div>
    <input type="checkbox" value='$entity->id'><label><strong>$entity->name</strong>
    <div>$entity->detail</div></label>
</div>

文档未提及在呈现表单时如何访问实体的特定字段。有没有人知道如何解决这个问题?

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以访问此类实体的特定字段 - 第一项为{{ form_widget(form.your_choice_field.0) }},第二项为{{ form_widget(form.your_choice_field.1) }},依此类推。

your_choice_field是一个表单字段,可以是choiceentity

{{ form_widget(form.your_choice_field.0) }}允许您访问choices数组中的各个项目。

答案 1 :(得分:1)

如果使用完整堆栈框架,所有表单的默认布局都放在

vendor\symfony\symfony\src\Symfony\Bridge\Twig\Resources\views\Form\form_div_layout.html.twig

你可以看到那里发生了什么,实体被渲染为

{% block choice_widget_expanded %}
{% spaceless %}
    <div {{ block('widget_container_attributes') }}>
    {% for child in form %}
        {{ form_widget(child) }}
        {{ form_label(child) }}
    {% endfor %}
    </div>
{% endspaceless %}
{% endblock choice_widget_expanded %}

如果你想owerWrite写一个实体字段的行,就像@Manocho提到的那样,你可以引用http://symfony.com/doc/current/cookbook/form/form_customization.html并覆盖模板文件中的那个块,然后添加

{% form_theme form _self %}

所以twig将在

中呈现的同一枝条文件中搜索被覆盖的块

答案 2 :(得分:0)

在将property字段添加为described here时,您是否尝试添加entity选项?您还可以向您的实体添加__toString方法。