覆盖Symfony2中的表单字段模板



我想覆盖基本的Symfony2表单输入字段,以添加我的类,但它不起作用。这是我的代码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属性仍然等于custom_form。我做错了什么?也许我在正确的区块内过度了?有人能帮我吗?谢谢

附加:这是我的表格类型:

/**
 * {@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-*属性添加到simple_widget时,它也可以正常工作。但class没有追加。

如果你只想覆盖一个类,你可以简单地执行:

{{ form_widget(form, {'attr': {'class': 'testik_class'}}) }}

在您的模板中,而不使用任何特定的表单主题。这解决了您的问题,使您的代码更加可读。

甚至当你用PHP构建表单时:

$builder->add('title', 'text', ['label' => 'form.title', 'attr' => array( 'class' => 'testik_class')])

最新更新