33

我使用 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();

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

类“App\FrontBundle\Entity\Account”中不存在属性“password_confirmation”、方法“getPasswordConfirmation()”和方法“isPasswordConfirmation()”

如何添加自定义字段?之后,如何验证它?

谢谢你。BR。

4

2 回答 2

67

Symfony 2.1 的更新:

property_path已被弃用,您应该使用mapped。语法保持不变:

->add('password_confirmation', 'password', array('mapped' => false))
于 2013-03-01T01:00:16.443 回答
52

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

->add('password_confirmation', 'password', array('property_path' => false))

然后使用CallBackValidator对其进行验证。

但是,在这种特定情况下,您想要重复一个字段,重复的小部件可以为您做到这一点。

->add('password_confirmation', 'repeated', array(
    // See the docs :)
));
于 2012-06-08T16:13:05.087 回答