我正在尝试学习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
提前致谢。
答案 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
来尝试所需的字段。