2012-01-31 5 views
5

J'essaye d'implémenter la fonctionnalité de changement de mot de passe dans le projet Symfony 2. J'ai l'entité User avec les règles de validation dans le fichier validation.yml. Dans User entité j'ai champ "password" avec ses contraintes de validation dans validation.yml.
J'ai créé un formulaire avec 2 champs 'password' et 'confirmPasswod'. Je veux utiliser mes contraintes de validation d'entité pour le champ 'mot de passe' et vérifier l'égalité entre les champs 'passwod' et 'confirmPassword'. Dans mon contronller j'écrireValidation des champs égaux dans Symfony 2

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

Dans entité « User » Je n'ai pas le champ « confirmPasswod ». Donc, je reçois l'erreur:

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

Est-il possible d'utiliser la validation de formulaire basé entité pour certains champs de formulaire et non validation axée sur les entités pour d'autres? Merci d'avance.

Répondre

16

En SymfonyForm\ChangePasswordType vous pouvez utiliser quelque chose comme ceci:

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

Depuis Symfony 2.1, vous pouvez configurer les options pour éviter le nom de l'élément cassé (comme mentionné dans un commentaire)

$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

Merci, cela a été très utile. – Ris90

+1

Cela a fonctionné pour moi aussi. Merci. Il y a une chose que j'ai changé, cependant. J'ai utilisé 'password' et' password_confirmation' au lieu de 'Password' et' Password confirmation'. Si vous utilisez ce dernier, vous vous retrouvez avec des noms d'éléments maladroits comme 'vnn_pressboxbundle_preferencestype_password_Confirm password '. –

Questions connexes