0

我正在尝试学习 Symfony2。

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

---------------------------------------------------------------------
  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
---------------------------------------------------------------------

并且该实体与“公寓”处于多对多关系。

在 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

提前致谢。

4

1 回答 1

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.

于 2015-06-03T12:48:01.513 回答