Как передать переменную в form_theme? - PullRequest
8 голосов
/ 07 января 2012

Я хочу создать тему для своей формы, чтобы метка поля отображала текущую локаль, что-то вроде

Имя (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' %}

, но переменная приложения недоступна в шаблоне формы.Как передать переменную в тему формы?

Ответы [ 3 ]

4 голосов
/ 15 марта 2016

В текущей версии ветки (как и в 2016 году) это возможно.В вашем шаблоне используйте следующее:

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

Затем в файле темы просто используйте:

{{testvar}}

конечно вместо form.content вы будете использовать имя полятебе нужно.Ура, Крис

1 голос
/ 07 января 2012

Вам нужно создать расширение формы, чтобы сделать это. Взгляните на

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

чтобы узнать, как создать расширение.

Чтобы иметь доступ к локали сеанса, обязательно добавьте контейнер. После этого вы сможете получить любое значение переменной.

0 голосов
/ 07 января 2012

Если переменная app недоступна в теме формы, это может быть ошибкой. Я предлагаю вам создать билет .

В то же время вы можете использовать текущий шаблон в качестве темы. Что-то вроде ...

{% 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...