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

时间:2012-06-08 13:54:11

标签: symfony symfony-forms

我使用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。

2 个答案:

答案 0 :(得分:63)

Symfony 2.1的更新:

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

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

答案 1 :(得分:51)

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

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

然后使用CallBackValidator验证它。

但是,在这种特殊情况下,您想要重复某个字段,repeated窗口小部件可以为您执行此操作。

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