FOSUserBundle,SonataUserBundle覆盖注册

时间:2015-02-09 15:02:35

标签: symfony-forms sonata-user-bundle

我设法覆盖了注册页面的模板和表单,但我注意到的一件事是注入了初始字段。

这是我的构建代码:

public function buildForm(FormBuilderInterface $builder, array $options) {        
    $builder->add('firstname', 'text', array('label' => 'First Name'))
            ->add('lastname', 'text', array('label' => 'Last Name'))
            ->add('over_18', 'checkbox', array('label' => 'Yes I am over 18', 'mapped' => false))
            ->add('email', 'text', array('label' => 'Email'))
            ->add('phone', 'text', array('label' => 'What is your telephone number?'))
            ->add('password', 'password', array('label' => 'Choose a password'))
    ;
}

当我在模板中执行{{ dump(form) }}时,我得到了这个:

enter image description here

我知道我可以对这些字段执行$ builder-> remove(),但如果我覆盖表单,我真的需要这样做吗?

由于

2 个答案:

答案 0 :(得分:0)

是。这是唯一的方法。因为buildForm()方法被链接到父buildForm()。这就是形式父子依赖在symfony2中的作用:

/**
 * @return string
 */
public function getParent()
{
    return 'fos_user_registration';
}

答案 1 :(得分:0)

不确定这是否是您要查找的信息,但在使用FOSUser和Sonata用户时,您只需扩展parent :: buildForm(),然后添加如下自定义字段:

// src/Application/Sonata/UserBundle/Form/Type/RegisterType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
    // call to FOSUser buildForm, brings default fields
    parent::buildForm($builder, $options);

    $builder
        ->add('phone','text',array('label' => 'phone','required'=>true))
        ;
    //do $builder->remove(..) if necessary

}