2012-06-08 9 views
28

Lavoro con Symfony2 e vorrei creare un modulo di registrazione. Non voglio usare FOSUserBundle.Symfony 2: aggiungi un elemento del modulo personalizzato, non in un'entità

Così, ho creare un account Entity (con i campi: nome utente, password, e-mail ...) e ho creare la forma:

$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(); 

Ora, voglio aggiungere un campo di conferma per la password. Ma, quando provo ad aggiungere un campo con metodo add(), ad esempio "password_confirmation" ho questo:

Né proprietà "password_confirmation", né il metodo "getPasswordConfirmation()" o il metodo "isPasswordConfirmation() "esiste nella classe" App \ FrontBundle \ Entity \ Account "

Come posso aggiungere un campo personalizzato? E dopo, come convalidarlo?

Grazie. BR.

risposta

49

In una situazione normale, è necessario specificare esplicitamente che * password_confirmation * non fa parte dell'entità, utilizzando l'opzione property_path.

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

E quindi convalidarlo con un CallBackValidator.

Ma, in questo caso specifico, in cui si desidera ripetere un campo, il widget repeated può farlo per voi.

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

Grazie mille;) –

+0

Una risposta perfetta. – rjmunro

+0

Grazie mille. – iizno

61

Un aggiornamento per Symfony 2.1:

property_path è stato deprecato e invece si dovrebbe usare mapped. La sintassi rimane la stessa:

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

Funziona anche per Symfony 3.0 – yeouuu

Problemi correlati