2012-06-08 83 views
28

我使用Symfony2,我想創建一個註冊表單。 我不想使用FOSUserBundle。Symfony 2:添加自定義表單元素,而不是實體

所以,我創建一個實體帳戶(與字段:用戶名,密碼,電子郵件...),我創建表單:

$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」 我有這樣的:

無論財產 「password_confirmation」 也不是辦法 「getPasswordConfirmation()」,也不是方法,「isPasswordConfirmation() 「存在於班級」App \ FrontBundle \ Entity \ Account「

如何添加自定義字段?之後,如何驗證它?

謝謝。 BR。

回答

49

在正常情況下,您需要使用property_path選項明確指定* password_confirmation *不是實體的一部分。

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

然後用CallBackValidator進行驗證。

,在這種特殊情況下,要重複一個領域,repeated Widget可以爲你做的。

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

非常感謝您;) –

+0

一個完美的答案。 – rjmunro

+0

非常感謝。 – iizno

61

的Symfony的2.1更新:

property_path已被棄用,取而代之,你應該使用mapped。語法保持不變:

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

它也適用於Symfony 3.0 – yeouuu