В официальном кукбуке, есть статья How to customize form rendering, в которой описано, как создать свою тему для форм в Symfony2 (свои шаблоны). Этот пост - пересказ моментов, которые я не понял с первого раза.
Итак, symfony2 из коробки использует шаблонизатор Twig, с ним и будем работать.
Шаблон форм, по умолчанию, лежит в файле:
Есть еще один шаблон (form_table_layout.html.twig, из той же папки), подключить его можно сразу для всего приложения:
...или для отдельного шаблона:
Существует два пути для переопределения блоков.
1. Переопределить блоки форм в шаблоне с текущей формой (переопределенные блоки будут использоваться только в текущем файле)
2. Переопределить блоки в отдельном шаблоне (позволяет использовать переопределенные блоки во многих местах)
По тэгу form_theme Twig ищет переопределенные блоки для форм. В первом случае - в текущем файле, во втором - в отдельном шаблоне.
И, наконец, то, к чему мы и стремились - копируем нужный блок из дефолного шаблона и кастомизируем его под свои нужды. Например переопределим блок form_widget_simple, добавив в конец <input> тег <span> с классом valid:
Итак, symfony2 из коробки использует шаблонизатор Twig, с ним и будем работать.
Шаблон форм, по умолчанию, лежит в файле:
[project_dir]/vendor/symfony/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig
(посмотреть содержимое на github)Есть еще один шаблон (form_table_layout.html.twig, из той же папки), подключить его можно сразу для всего приложения:
# app/config/config.yml
twig:
form:
resources: ['form_table_layout.html.twig']
...или для отдельного шаблона:
# some_template_file.html.twig
{% form_theme form 'form_table_layout.html.twig' %}
Существует два пути для переопределения блоков.
1. Переопределить блоки форм в шаблоне с текущей формой (переопределенные блоки будут использоваться только в текущем файле)
# some_template_file.html.twig
{% form_theme form _self %}
2. Переопределить блоки в отдельном шаблоне (позволяет использовать переопределенные блоки во многих местах)
# some_template_file.html.twig
{% form_theme form 'AcmeDemoBundle:Form:fields.html.twig' %}
По тэгу form_theme Twig ищет переопределенные блоки для форм. В первом случае - в текущем файле, во втором - в отдельном шаблоне.
И, наконец, то, к чему мы и стремились - копируем нужный блок из дефолного шаблона и кастомизируем его под свои нужды. Например переопределим блок form_widget_simple, добавив в конец <input> тег <span> с классом valid:
# some_template_file.html.twig
{% block form_widget_simple %}
{% spaceless %}
{% set type = type|default('text') %}
<input block="block" empty="empty" endif="endif" if="if" is="is" not="not" type="{{ type }}" value="{{ value }}" widget_attributes="widget_attributes" /><span class="valid"> </span>
{% endspaceless %}
{% endblock form_widget_simple %}
Комментариев нет:
Отправить комментарий