Symfony 2:添加自定义表单元素,而不是在实体中

Tho*_*s K 31 symfony-forms symfony

我使用Symfony2,我想创建一个注册表单.我不想使用FOSUserBundle.

所以,我创建了一个实体帐户(包括字段:用户名,密码,电子邮件...),我创建了表单:

 $account = new Account();

$form = $this->createFormBuilder($account)
  ->add('username',         'text', array('label' => 'Nom de compte :'))
  ->add('password',    'password', array('label' => 'Mot de passe :'))
  ->add('email',            'email', array('label' => 'Adresse email :'))
  ->getForm();
Run Code Online (Sandbox Code Playgroud)

现在,我想为密码添加一个确认字段.但是,当我尝试使用add()方法添加字段时,例如"password_confirmation"我有这个:

类"App\FrontBundle\Entity\Account"中不存在属性"password_confirmation"和方法"getPasswordConfirmation()"以及方法"isPasswordConfirmation()"

如何添加自定义字段?之后,如何有效呢?

谢谢.BR.

Squ*_*zic 65

Symfony 2.1的更新:

property_path已弃用,您应该使用映射.语法保持不变:

->add('password_confirmation', 'password', array('mapped' => false))
Run Code Online (Sandbox Code Playgroud)


Sam*_*ane 51

在正常情况下,您需要使用property_path选项明确指定*password_confirmation*不是实体的一部分.

->add('password_confirmation', 'password', array('property_path' => false))
Run Code Online (Sandbox Code Playgroud)

然后使用CallBackValidator验证它.

但是,在这种特殊情况下,您想要重复一个字段,重复的小部件可以为您完成.

->add('password_confirmation', 'repeated', array(
    // See the docs :)
));
Run Code Online (Sandbox Code Playgroud)

  • 从Symfony 2.1开始,这已不再有效.您应该使用'mapped'=> false,例如:` - > add('password_confirmation','password',array('mapped'=> false));` (38认同)