如何将变量传递给form_theme?

时间:2012-01-06 20:20:12

标签: symfony twig

我想主题化我的表单,以便字段的标签显示当前的语言环境,例如

  

姓名(en):

所以我想像那样重写块generic_label:

{# form_theme.html.twig #}

{% block generic_label %}
{% spaceless %}
    {% if required %}
        {% set attr = attr|merge({'class': attr.class|default('') ~ ' required'}) %}
    {% endif %}
    <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>{{ label|trans }} (app.session.locale)</label>
{% endspaceless %}
{% endblock %}

并将其导入我的模板中:

{% form_theme options 'myBundle:Object:form_theme.html.twig' %}

但是表单模板中无法访问app变量。 如何将变量传递给表单主题?

3 个答案:

答案 0 :(得分:4)

在当前版本的树枝(2016年)中,它是可能的。 在您的模板中使用以下内容:

{{ form_row(form.content, {'testvar' : 'this is test variable'}) }}

然后,在您的主题文件中,只需使用:

{{testvar}}

当然不是form.content,而是使用您需要的字段名称。 干杯, 克里斯

答案 1 :(得分:1)

您需要创建表单扩展才能完成它。看看

http://toni.uebernickel.info/2011/11/25/how-to-extend-form-fields-in-symfony2.html

了解如何创建扩展程序。

要访问会话区域设置,请确保注入容器。之后,您将能够获得所需的任何var值。

答案 2 :(得分:0)

如果表单主题中没有app变量,则可能是错误。我建议你create a ticket

在此期间,您可以将当前模板用作主题。有点像...

{% form_theme form _self %}

{% block field_label %}
    {% set attr = attr|merge({ 'for': id }) %}
    {% if required %}
        {% set attr = attr|merge({ 'class': attr.class|default('') ~ ' required' }) %}
    {% endif %}
    <label{% for attrname, attrvalue in attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}>{{ label|trans }} ({{ app.session.locale }})</label>
{% endblock %}

如果您使用的是Symfony master(2.1),请将app.session.locale替换为app.request.locale