在Symfony2中为所有多个选择添加类和属性?

时间:2014-02-28 13:13:53

标签: forms symfony

我想自定义我的应用程序的所有多个选择:

<select class="selectpicker show-tick" data-size="auto">
...
</select>

我该怎么做?

编辑ncrocfer

这是我的构建表单方法: 这不完整,缺少一些东西......

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('title')
        ->add('misc')
        ->add('url')
        ->add('attachment', 'file')
        ->add('time_estimated')
        ->add('started_at')
        ->add('finished_at')
        ->add('default')
        ->add('deadline')
        ->add('priority', 'entity', array(
            'class'    => 'LanCrmBundle:TaskPriority',
            'property' => 'title',
            'multiple' => false
        ))
        ->add('project', 'entity', array(
            'class'    => 'LanCrmBundle:Project',
            'property' => 'title',
            'multiple' => false
        ))
        ->add('category', 'entity', array(
            'class'    => 'LanCrmBundle:TaskCategory',
            'property' => 'title',
            'multiple' => false
        ))
        ->add('user', 'entity', array(
            'class'    => 'LanSecurityBundle:User',
            'property' => 'username',
            'multiple' => false
        ))
        ->add('products', 'entity', array(
            'class'    => 'LanCrmBundle:Product',
            'property' => 'title',
            'multiple' => true
        ))
    ;
}

2 个答案:

答案 0 :(得分:1)

使用表单文件夹中的attr属性:

<?php

namespace Foo\BarBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class FooType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('foo', 'choice', array(
                'choices' => array(0 => 'Option 1', 1 => 'Option 2'),
                'attr' => array('class' => 'selectpicker show-tick', 'data-size' => 'auto'),
            ))
        ;
    }
}

修改

如果你有很多表单,就像你在评论中说的那样,你可以使用form customization

创建新模板文件:

{# src/Foo/BarBundle/Resources/views/Form/fields.html.twig #}
{% block choice_widget_collapsed %}
{% spaceless %}
    <select {{ block('widget_attributes') }}{% if multiple %} multiple="multiple"{% endif %} class="selectpicker show-tick" data-size="auto">
        {% if empty_value is not none %}
            <option value="">{{ empty_value|trans({}, translation_domain) }}</option>
        {% endif %}
        {% if preferred_choices|length > 0 %}
            {% set options = preferred_choices %}
            {{ block('choice_widget_options') }}
            {% if choices|length > 0 and separator is not none %}
                <option disabled="disabled">{{ separator }}</option>
            {% endif %}
        {% endif %}
        {% set options = choices %}
        {{ block('choice_widget_options') }}
    </select>
{% endspaceless %}
{% endblock choice_widget_collapsed %}

然后在应用程序配置中导入模板:

# app/config/config.yml
twig:
    form:
        resources:
            - 'FooBarBundle:Form:fields.html.twig'

此更改将对您的所有select生效。

答案 1 :(得分:0)

使用attr中的FormBuilder属性:

'attr' => array('class'=>'selectpicker show-tick', 'data-size'=>'auto')