Symfony2 - 更改实体复选框的布局

时间:2015-06-03 11:31:16

标签: symfony symfony-forms symfony-2.6

我正在尝试学习Symfony2。

我创建了一个实体(Facility),我在数据库中给它这个演示文稿:

---------------------------------------------------------------------
  ID  |  Parent_ID  |  Label  |  created_at  |  updated_at
---------------------------------------------------------------------
  1   |    NULL     |  Fi P   |  3/6/2015    |  3/6/2015
---------------------------------------------------------------------
  2   |    NULL     |  Sec P  |  3/6/2015    |  3/6/2015
---------------------------------------------------------------------
  3   |      1      |  Ch 1   |  3/6/2015    |  3/6/2015
---------------------------------------------------------------------
  4   |      2      |  Ch 2   |  3/6/2015    |  3/6/2015
---------------------------------------------------------------------

此实体与“Apartement”处于多对多关系中。

在ApartementType表格中有:

->add('facilities','entity', array(
     'class' => 'AdminBundle\Entity\Facility',
     'multiple' => true ,
     'expanded' => true,
     'required' => false
))

它生成复选框,直到这里一切都很好。

我想更改复选框的显示,以显示“父名称”(作为标题)中的每个父项,并将其作为复选框显示。

像:

Parent Name #1
+checkbox1  +checkbox2  +checkbox3  +checkbox4

Parent Name #2
+checkbox1  +checkbox2  +checkbox3  +checkbox4

提前致谢。

1 个答案:

答案 0 :(得分:0)

您必须扩展呈现复选框字段的块。

此块在此文件vendor/symfony/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig中声明。

现在你所要做的就是(在你的模板中):

{% form_theme form _self %}

{%- block choice_widget_expanded -%}
    <div {{ block('widget_container_attributes') }}>
    {%- for child in form %}
        {# INSERT HERE PARENT NAME #}
        PARENTNAME
        {{- form_widget(child) -}}
        {{- form_label(child) -}}
    {% endfor -%}
    </div>
{%- endblock choice_widget_expanded -%}

现在您可以更改表单的呈现方式。它将在每个复选框行之前输出PARENTNAME

但是现在,如果你想添加变量而不是固定字符串怎么办?

您必须将其添加到您的字段中(在您的FormType中):

protected $parentName;

public function __construct()
{
     $this->parentName = [ 'foo', 'bar', 'baz' ];
}

public function buildView(FormView $view, FormInterface $form, array $options)
{
    $view->vars['parentname'] = $this->parentName;
}

最后但并非最不重要的是,在您的模板中,该字段的扩展呈现现在是:

{%- block choice_widget_expanded -%}
    <div {{ block('widget_container_attributes') }}>
    {%- for child in form %}
        {{ form.vars.parentName[loop.index] }}
        {{- form_widget(child) -}}
        {{- form_label(child) -}}
    {% endfor -%}
    </div>
{%- endblock choice_widget_expanded -%}

PS:这是全球计划,我不确定这是您要扩展的特定字段,但现在您可以通过查看vendor/symfony/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig来尝试所需的字段。