twig使用form_theme自定义form_row

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了twig使用form_theme自定义form_row相关的知识,希望对你有一定的参考价值。

我想使用form_theme从form_row块中删除'div',如下所示:

{% form_theme feedback_form _self %}

{% block form_row %}
    {{ form_label(form) }}
    {{ form_errors(form) }}
    {{ form_widget(form) }}
{% endblock %}

{{ form_start(feedback_form) }}
    {{ form_row(feedback_form.name) }}
    {{ form_row(feedback_form.email) }}
    {{ form_row(feedback_form.subject) }}
    <button type="submit">Send</button>
{{ form_end(feedback_form) }}

就像Doc https://symfony.com/doc/2.8/form/form_customization.html#customizing-the-form-row所说的那样

问题是twig试图在模板的那个位置渲染{%block form_row%},它在哪里,结果是

变量“形式”不存在。

因为我在这个模板中没有变量'form'。

模板通过页面页脚中的单独操作呈现,并且不会扩展任何内容。

答案

好的,我在撰写问题时找到了解决方案。

将form_row块的代码放到单独的文件中可以解决问题。

{# feedback_form.html.twig #}
{% form_theme feedback_form 'fields.html.twig' %}

{{ form_start(feedback_form) }}
    {{ form_row(feedback_form.name) }}
    {{ form_row(feedback_form.email) }}
    {{ form_row(feedback_form.subject) }}
    <button type="submit">Send</button>
{{ form_end(feedback_form) }}

{# fields.html.twig #}
{% block form_row %}
    {{ form_label(form) }}
    {{ form_errors(form) }}
    {{ form_widget(form) }}
{% endblock %}

扩展另一个模板也有帮助。

{# base.html.twig #}
{% block content %}
{% endblock %}

{# feedback_form.html.twig #}
{% extends 'base.html.twig' %}
{% form_theme feedback_form _self %}

{% block form_row %}
    {{ form_label(form) }}
    {{ form_errors(form) }}
    {{ form_widget(form) }}
{% endblock %}

{% block content %}
    {{ form_start(feedback_form) }}
        {{ form_row(feedback_form.name) }}
        {{ form_row(feedback_form.email) }}
        {{ form_row(feedback_form.subject) }}
        <button type="submit">Send</button>
    {{ form_end(feedback_form) }}
{% endblock %}

以上是关于twig使用form_theme自定义form_row的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Shopware 6 中创建可以在 Twig 文件中使用的自定义 Javascript?

自定义错误页面中的 Silex 和 Twig 助手

markdown 用于预处理字段的WordPress自定义PHP函数在Twig模板中使用之前

如何使用 Ocmod 在 Opencart 3.0.2.0 中的 product.twig(catalog/view/theme/default/template/product/) 中添加自定义表单

Drupal 8添加javascript并使用自定义模块在钩子中传递数据

php 基于内容类型的Drupal 8自定义页面模板(建议)(页面 - [content-type] .html.twig)