Я хочу оформить свою форму так, чтобы метка поля показывала текущую локаль, например
Название (ан) :
Итак, я хотел бы переписать блок 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' %}
но переменная приложения недоступна в шаблоне формы. Как я могу передать переменную в тему формы?
Ответ 1 · рейтинг 7 · Chris
В текущей версии twig (на 2016 год) это возможно. В вашем шаблоне используйте следующее:
{{ form_row(form.content, {'testvar' : 'this is test variable'}) }}
Затем в файле темы просто используйте:
{{testvar}}
конечно, вместо form.content вы будете использовать нужное вам имя поля. Привет, Крис
Ответ 2 · рейтинг 1 · P. R. Ribeiro
Вам нужно создать расширение формы, чтобы сделать это. Взгляни на
http://toni.uebernickel.info/2011/11/25/how-to-extend-form-fields-in-symfony2.html
чтобы узнать, как создать расширение.
Чтобы иметь доступ к локали сеанса, обязательно внедрите контейнер. После этого вы сможете получить любое желаемое значение var.
Ответ 3 · Kris Wallsmith
Если переменная 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.