Symfony:实体类型

时间:2017-02-24 15:02:32

标签: php symfony twig

我在 Symfony表单中呈现实体类型时遇到问题。

以下是我在类型

形式中所说的内容
$builder
            ->add('categories', EntityType::class, array
            (
                'class' => 'AppBundle\Entity\ArticleCategory',
                'choice_label' => 'name',
                'expanded' => true,
                'multiple' => true,
                'constraints' => array
                (
                    new NotBlank(array('message' => 'Select Category'))
                )
            ))

这是我想要做的模板:

{% form_theme form _self %}
{% block _article_categories_entry_row %}
    <div class="ckbox ckbox-default">
       {{ form_widget(form) }}
       {{ form_label(form) }}
       {{ form_errors(form) }}
    </div>
{% endblock %}

在我正在做的同一模板中

 {{ form_start(form) }}
 {{ form_row(form.categories) }}
 {{ form_end(form) }}

当我使用 block _article_categories_entry_widget 时会发生奇怪的事情并且它会将其选中,但它会将标签呈现两次。任何想法如何处理情况?在上面的场景中,它根本不渲染或添加ckbox类! :(

2 个答案:

答案 0 :(得分:1)

在您命名自定义块_article_categories_entry_row时,我认为您的表单名为ArticleType

特定表单字段的自定义块应使用以下模式命名:

_<form_name>_<field_name>_<part_name>

可能的部分为rowerrorswidgetlabel。你在这里使用row

但是块名称的entry部分是不必要的。

尝试:

{% block _article_categories_row %}

您可以在Symfony Documentation

中找到更多详情

答案 1 :(得分:1)

您可以循环浏览模板中的form.categories,如下所示,然后根据需要渲染复选框。

{{ form_start(form) }}
{% for category in form.categories %}
    {{ form_label(category) }}
    {{ form_widget(category) }}
{% endfor %}
{{ form_end(form) }}