2012-06-08 20 views
28

Trabajo con Symfony2 y me gustaría crear un formulario de registro. No quiero usar FOSUserBundle.Symfony 2: Agregue un elemento de formulario personalizado, no en una entidad

Por lo tanto, crea una cuenta Entidad (con los campos: nombre de usuario, contraseña, correo electrónico ...) y crear el formulario:

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

Ahora, quiero añadir un campo de confirmación de la contraseña. embargo, cuando intento agregar un campo con método add(), por ejemplo "password_confirmation" tengo esto:

Ni propiedad "password_confirmation" ni método "getPasswordConfirmation()" ni el método de "isPasswordConfirmation() "existe en la clase 'App \ FrontBundle \ Entidad \ cuenta'

¿Cómo puedo añadir un campo personalizado? Y después, ¿cómo validarlo?

Gracias. BR.

Respuesta

49

En una situación normal, debe especificar explícitamente que * password_confirmation * no es parte de la entidad, utilizando la opción property_path.

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

Y luego validarlo con un CallBackValidator.

Pero, en este caso específico, donde desea repetir un campo, el widget repeated puede hacer eso por usted.

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

Muchas gracias;) –

+0

Una respuesta perfecta. – rjmunro

+0

Muchas gracias. – iizno

61

Una actualización para Symfony 2.1:

property_path ha quedado obsoleto y en su lugar debe usar mapped. La sintaxis sigue siendo la misma:

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

También funciona para Symfony 3.0 – yeouuu

Cuestiones relacionadas