通过form_theme

时间:2018-08-02 13:49:29

标签: symfony

我想自定义表单中CollectionType条目的呈现方式,即原型的生成方式,我需要自己的HTML。因此,我需要使用Twig form_theme进行此操作,但是它不起作用。 我目前正在使用Symfony 4.1.2。

这是我现在拥有的:

在呈现整个表单的模板中:

{% form_theme form.additionalEmails.vars.prototype 'form/additionalEmail.html.twig' %}

以/additionalEmail.html.twig文件的形式:

{% block form_row %}
<div style="margin: 10px 0">
    {{ form_label(form) }}
    {{ form_widget(form.children.value) }}
    <div>Recevoir les mails de type : {{ form_row(form.children.isUsedForAdminCommChannel) }}{{ form_row(form.children.isUsedForInfosPratiquesCommChannel) }}{{ form_row(form.children.isUsedForAgendaCommChannel) }}</div>
</div>
{% endblock %}

如果这样做,我会收到此错误:

 Key "value" does not exist as the array is empty.

奇怪的是,如果我以此替换上面的代码(通过注释旧代码并添加新行):

 {{ dump(form.children) }}

我看到form.children是一个包含4个项目和一个名为“值”的数组,因此显然已损坏。

您的帮助将不胜感激,因为我只是一个业余爱好者,正在尝试为青年运动建立一个网站^^

最好的问候,

[编辑] 这是包含CollectionType的表单:

https://gist.github.com/MrPOC/a4af94cc5e577a1244dac59de5ea3506

该字段名为“ additionalEmails”

1 个答案:

答案 0 :(得分:0)

所以我理解正确。您有一个包含CollectionType的表单,并且想要更改该CollectionType的原型吗?

如果可以,请与CollectionType一起发布表格?

编辑:好的,这是覆盖CollectionType的原型模板的方法。

首先,我们必须找出您的表单unique_block_prefix是什么。您可以通过转至呈现此表单的页面来找到它,然后单击表单图标上的symfony调试栏。然后,您必须展开查看变量块并寻找unique_block_prefix

我假设您的块前缀看起来像这样_user_type,那么您将覆盖的块的名称就是_user_type_additionalEmails_entry_widget(有关更多详细信息,请阅读下面提供的链接)

您可以根据要覆盖的内容用 row label 替换小部件(我建议尝试全部覆盖它们以查看实际变化,因为不知道我的头顶)

然后在树枝中使用块前缀并以覆盖其他字段的相同方式覆盖原型字段

{% block '_user_type_additionalEmails_entry_widget' %}
    //Content
{% endblock %}

我在这里写下的内容是在阅读https://github.com/symfony/symfony-docs/issues/6056(特别是阅读HeahDude的评论)后发现的结果

我希望这会有所帮助!