2012-01-31 16 views
5

Estoy tratando de implementar la funcionalidad de cambio de contraseña en el proyecto Symfony 2. Tengo entidad User con reglas de validación en el archivo validation.yml. En la entidad User tengo el campo "password" con sus restricciones de validación en validation.yml.
Creé formulario con 2 campos 'password' y 'confirmPasswod'. Deseo utilizar las restricciones de validación de mi entidad para el campo 'contraseña' y verificar la igualdad entre los campos 'passwod' y 'confirmPassword'. En mi contronller escriboValidación de Equal Fields en Symfony 2

$form = $this->createForm(new SymfonyForm\ChangePasswordType(), new Entity\User()); 
if ($form->isValid()) 
    {..............} 

en la entidad 'Usuario' no tengo campo 'confirmPasswod'. Así que me sale error:

Neither property "confirmPassword" nor method "getConfirmPassword()" nor method "isConfirmPassword()" exists in class 

¿Hay alguna manera de utilizar la validación de formularios basados ​​en la entidad para algunos campos del formulario y no basado en la validación de otra entidad? Gracias de antemano.

Respuesta

16

En SymfonyForm\ChangePasswordType se puede usar algo como esto:

$builder->add('password', 'repeated', array(
    'type' => 'password', 
    'first_name' => 'Password', 
    'second_name' => 'Password confirmation', 
    'invalid_message' => 'Passwords are not the same', 
)); 

Desde Symfony 2.1 puede configurar las opciones para evitar el nombre del elemento roto (como se menciona en el comentario)

$builder->add('password', 'repeated', array(
    // … the same as before 
    'first_name' => 'passwd', 
    'second_name' => 'passwd_confirm', 
    // new since 2.1 
    'first_options' => array('label' => 'Password'), 
    'second_options' => array('label' => 'Password confirmation'),  
)); 
+0

Gracias, esto era muy servicial. – Ris90

+1

Esto funcionó para mí también. Gracias. Sin embargo, hay una cosa que cambié. Utilicé 'password' y' password_confirmation' en lugar de 'Password' y' Password confirmation'. Si usa este último, terminará con nombres de elementos incómodos como 'vnn_pressboxbundle_preferencestype_password_Confirm password'. –