Symfony2 FormBuilder:如何添加和属性到多个表单域

时间:2013-05-09 16:15:57

标签: symfony symfony-forms

我想在大多数字段中添加样式表类属性,但不是全部。

public function buildForm(FormBuilder $builder, array $options)
{
    $builder
        ->add('name_short', null, array('attr' => array('class' => 'rtl')) )
        ->add('name_long')
        ->add('profile_education')
        ->add('profile_work')
        ->add('profile_political')
        ->add('twitter')
        ->add('facebook')
        ->add('website')
    ;
}

是否有比将属性array('attr' => array('class' => 'rtl'))添加到每个字段更简单的方法?

在将字段添加到构建器之后,正在寻找循环字段和设置属性之类的内容。

更像这样(不幸的是,FormBuilder中没有setOption方法):

foreach($builder->all() as $key => $value) {
    $value->setOption('attr', array('class' => 'rtl'));
}

感谢您的任何指示。

2 个答案:

答案 0 :(得分:0)

您可以在构建表单时执行此操作。只需将字段名称保存在数组中即可。如果需要指定不同的字段类型,请改用关联数组。

public function buildForm(FormBuilder $builder, array $options)
{
    $fields = array('name_short', 'profile_education', 'profile_work', 'profile_political', 'twitter', 'facebook', 'website');

    foreach ($fields as $field) {
        $builder->add($fields, null, array('attr' => array('class' => 'rtl')));
    }
}

答案 1 :(得分:0)

遇到这个并记得我最近发现了一种有效的方法 基本上迭代所有字段,删除并使用合并选项重新添加它们 以下面的例子为例。

public function buildForm(FormBuilder $builder, array $options)
{
    $builder
        ->add('name_short')
        ->add('name_long')
        ->add('profile_education')
        ->add('profile_work')
        ->add('profile_political')
        ->add('twitter')
        ->add('facebook')
        ->add('website')
    ;

    $commonOptions = array('attr' => array('class' => 'rtl'));

    foreach($builder->all() as $key => $field)
    {
        $options = $field->getOptions();
        $options = array_merge_recursive($options, $commonOptions);

        $builder->remove($key);
        $builder->add($key, $field->getName(), $options);
    }    
}