Symfony2表单标签原始输出

6

我希望进行原始翻译,因此在twig模板中决定使用“raw”选项。但是它不起作用。例如:

{{ form_label(form.sfGuardUserProfile.roules_acceptance) | raw }}

在我的网站上,我将看到这个:
Accept the <a href="url_to_pdf">terms</a>

我不想看到 HTML 代码,而是想看到链接。如何显示表单的原始标签?

你能添加预期的输出吗?为什么不直接使用form_label函数? - ferdynator
因为在我的翻译中,我有PDF文件中术语的链接,但是这个链接被转义了,你无法点击它,因为你在网站上看到的是HTML代码。我想要的是链接而不是HTML代码。 - Purzynski
3个回答

9

阅读此处:http://symfony.com/doc/current/cookbook/form/form_customization.html

如果您的字段名称为 product[name],则可以仅针对该个别字段覆盖标签块:

{% block _product_name_label %}
     <label>{{ label|raw }}</label>
{% endblock %}

或者举个例子:
{% block _product_name_label %}
     <label>Accept the <a href="url_to_pdf">terms</a></label>
{% endblock %}

只需将代码放在呈现表单的模板中,并添加相应的HTML标签即可。
{% form_theme form _self %}

因此,渲染引擎将首先在同一文件中搜索被覆盖的块。

如果您使用全栈框架,则可以在 \vendor\symfony\symfony\src\Symfony\Bridge\Twig\Resources\views\Form\form_div_layout.html.twig 中找到默认模板文件。


1

我也尝试过这个:http://twig.sensiolabs.org/doc/tags/autoescape.html

{% autoescape false %}
    Everything will be outputted as is in this block
{% endautoescape %}

但是它不起作用。为什么呢?因为当您使用form_label()函数时,Symfony会使用\vendor\symfony\symfony\src\Symfony\Bridge\Twig\Resources\views\Form\form_div_layout.html.twig和此块:
    {% block form_label %}
    {% spaceless %}
        {% if label is not sameas(false) %}
            {% if not compound %}
                {% set label_attr = label_attr|merge({'for': id}) %}
            {% endif %}
            {% if required %}
                {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required')|trim}) %}
            {% endif %}
            {% if label is empty %}
                {% set label = name|humanize %}
            {% endif %}
            <label{% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}>{{ label|trans({}, translation_domain) }}</label>
        {% endif %}
    {% endspaceless %}
    {% endblock form_label %}

我可以尝试:

{{ form_label(form.sfGuardUserProfile.roules_acceptance) | raw }}

但是在form_div_layout.html.twig中,原始选项将被覆盖。最终我决定这样做:
{{ 'form.roules_acceptance'| trans | raw }}

我不确定我理解你做了什么? - Herr Nentu'
1
我编辑了我的帖子,如果有帮助的话,否则请告诉我你不理解的地方。我会尽力帮忙。 - Purzynski

0

由于我想保留form_div_layout的行为,因此最终采用了以下方法:

{%- block form_label -%}
    {% set label %}{{ label|raw }}{% endset %}
    {{ parent() }}
{%- endblock -%}

而对于处理翻译和正确显示的扩展版本,则是这样:

{% use 'form_div_layout.html.twig' %}

{%- block form_label -%}
    {# Set label to raw label #}
    {% if label is not same as (false) %}
        {% set label %}
            {%- if translation_domain is same as (false) -%}
                {{ label|raw }}
            {%- else -%}
                {{- label|trans({}, translation_domain)|raw }}
            {%- endif -%}
        {% endset %}
    {%- endif -%}

    {# Avoid call of translation again %}
    {% set translation_domain = false %}

    {# Call default behaviour from form_div_layout.html.twig #}
    {{- parent() -}}
{%- endblock -%}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接