覆盖 Symfony2 中的表单字段模板
Override form field templates in Symfony2
我想覆盖基本的 Symfony2 表单输入字段,以添加我的 class,但它不起作用。这是我的代码 AcmeDemoBundle:Form:fields.html.twig
{% extends 'form_div_layout.html.twig' %}
{% block form_widget_simple %}
{% set type = type|default('text') %}
<input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %} class="testik_class"/>
{% endblock form_widget_simple %}
在config.yml
# Twig Configuration
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
form_themes:
- 'AcmeDemoBundle:Form:fields.html.twig'
但是没有用。在我的表单中 class
attr 仍然等于 custom_form
。我做错了什么?也许我覆盖了 incorect 块?
有人可以帮我吗?谢谢!
补充:
这是我的表单类型:
/**
* {@inheritDoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('title', 'text', ['label' => 'form.title'])
->add('content', 'textarea', ['label' => 'form.content'])
;
}
这是表单模板:
{{ form_widget(form) }}
有趣的是,当我尝试覆盖 textarea_widget
块或 integer_widget
时,一切正常。或者当我尝试将 data-*
attr 添加到 simple_widget
时,它也能正常工作。但是 class
不追加。
如果你只想覆盖一个class,你可以简单地做:
{{ form_widget(form, {'attr': {'class': 'testik_class'}}) }}
在您的模板中,不使用任何特定的表单主题。这解决了您的问题并使您的代码更具可读性。
甚至当您在 PHP 中构建表单时:
$builder->add('title', 'text', ['label' => 'form.title', 'attr' => array( 'class' => 'testik_class')])
我想覆盖基本的 Symfony2 表单输入字段,以添加我的 class,但它不起作用。这是我的代码 AcmeDemoBundle:Form:fields.html.twig
{% extends 'form_div_layout.html.twig' %}
{% block form_widget_simple %}
{% set type = type|default('text') %}
<input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %} class="testik_class"/>
{% endblock form_widget_simple %}
在config.yml
# Twig Configuration
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
form_themes:
- 'AcmeDemoBundle:Form:fields.html.twig'
但是没有用。在我的表单中 class
attr 仍然等于 custom_form
。我做错了什么?也许我覆盖了 incorect 块?
有人可以帮我吗?谢谢!
补充: 这是我的表单类型:
/**
* {@inheritDoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('title', 'text', ['label' => 'form.title'])
->add('content', 'textarea', ['label' => 'form.content'])
;
}
这是表单模板:
{{ form_widget(form) }}
有趣的是,当我尝试覆盖 textarea_widget
块或 integer_widget
时,一切正常。或者当我尝试将 data-*
attr 添加到 simple_widget
时,它也能正常工作。但是 class
不追加。
如果你只想覆盖一个class,你可以简单地做:
{{ form_widget(form, {'attr': {'class': 'testik_class'}}) }}
在您的模板中,不使用任何特定的表单主题。这解决了您的问题并使您的代码更具可读性。
甚至当您在 PHP 中构建表单时:
$builder->add('title', 'text', ['label' => 'form.title', 'attr' => array( 'class' => 'testik_class')])