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

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()”

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

谢谢。


2个回答

67
Symfony 2.1 的更新: property_path 已被弃用,你应该使用 mapped。语法保持不变:
->add('password_confirmation', 'password', array('mapped' => false))

52
在正常情况下,您需要明确指定*password_confirmation*不是实体的一部分,使用property_path选项。
->add('password_confirmation', 'password', array('property_path' => false))

然后使用CallBackValidator进行验证。

但是,在需要重复字段的特定情况下,repeated小部件可以为您完成此操作。

->add('password_confirmation', 'repeated', array(
    // See the docs :)
));

39
自Symfony 2.1起,这不再有效。您应该使用'mapped'=>false,例如:->add('password_confirmation', 'password', array('mapped' => false)); - Wojciech Zylinski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接