我设法覆盖了注册页面的模板和表单,但我注意到的一件事是注入了初始字段。
这是我的构建代码:
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) }}
时,我得到了这个:
我知道我可以对这些字段执行$ builder-> remove(),但如果我覆盖表单,我真的需要这样做吗?
由于
答案 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
}