窗体继承-如何覆盖或添加新属性


Symfony - Form Inheritance - How to override or add a new attribute?

我使用表单继承,我想添加或替换我的'标题'类(已经存在于我的BookType)。我该怎么做呢?

class ValidationBookType extends BookType {
    public function buildForm(FormBuilderInterface $builder, array $options) {
        parent::buildForm($builder, $options);
        $builder
                ????????????????????????????????????????
                ->add('title', 'text', array(
                    'attr' => array(
                        'class' => 'newclass'
                    )
                ))
                ????????????????????????????????????????
        ;
    }
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver) {
        $resolver->setDefaults(array(
            'data_class' => 'Video2Learn'BddBundle'Entity'Book',
            'cascade_validation' => true,
        ));
        $resolver->setRequired(array(
            'step',
        ));
    }
    public function getName() {
        return 'Book';
    }
}

->setAttribute( ?

谢谢!

编辑找到了一个解决办法

我找到了一个解决方案,但可能有更好的方法…??

我做到了:

class ValidationBookType extends BookType {
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $parent = parent::buildForm($builder, $options);
        $array = $parent->get('title')->getOptions();
        $array['read_only'] = true;
        $builder
                ->remove('title')
                ->add('title', 'text', $array)

        ;
    }

我该如何改善?

我解决了这个问题:

class ValidationBookType extends BookType {
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $parent = parent::buildForm($builder, $options);
        $array = $parent->get('title')->getOptions();
        $array['read_only'] = true;
        $builder
                ->remove('title')
                ->add('title', 'text', $array)

        ;
    }