Symfony表单集合只读为第一次输入

时间:2012-07-26 14:16:03

标签: symfony-forms symfony-2.1

如何在呈现表单时为集合中的第一项设置只读选项?

我的简单模型:

class Main
{
    public $others;
}

class Other
{
    public $field1;

    public $field2;
}

我的模型的简单表单类型:

class MainType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('others', 'collection', array(
                'type' => new OtherType(),
                'allow_delete' => true,
                'allow_add' => true,
                'by_reference' => false,
            ))
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'App\MyBundle\Entity\Main',
        ));
    }

    public function getName()
    {
        return 'maintype';
    }
}

class OtherType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('field1')
            ->add('field2')
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'App\MyBundle\Entity\Other',
        ));
    }

    public function getName()
    {
        return 'othertype';
    }
}

简单的动作方法我的控制器

//...
public function indexAction($id)
{
    $main = new Main();

            $other1 = new Other();
    $other1->field1 = 'a';
    $other1->field2 = 'b';
    $main->others[] = $other;

            $other2 = new Other();
    $other2->field1 = 'c';
    $other2->field1 = 'd';
    $main->others[] = $other;

    $form = $this->createForm(new MainType(), $main);

    //...isValid, persist, flush...
}
//...

我可以在手动渲染表单时创建一个条件,但我想知道是否可以在表单代码中输入这样的限制。

1 个答案:

答案 0 :(得分:2)

目前,不可能让集合的行具有不同的选项。我邀请您在issue tracker上创建一个功能请求,如果您觉得这将是一个有价值的补充。