2012-01-31 15 views
5

Próbuję wprowadzić funkcję zmiany hasła w projekcie Symfony 2. Mam podmiot User z regułami sprawdzania poprawności w pliku validation.yml. W jednostce User mam pole "password" z jego ograniczeniami sprawdzania poprawności w validation.yml.
Utworzono formularz z 2 polami "password" i "confirmPasswod". Chcę użyć ograniczeń sprawdzania poprawności jednostek dla pola "hasło" i sprawdzić równość między polami "passwod" i "confirmPassword". W moim contronller napiszęWalidacja równych pól w Symfony 2

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

W jednostce "Użytkownik" nie mam pola "confirmPasswod". Więc mam błąd:

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

Czy istnieje jakiś sposób, aby używać walidacji formularza jednostki oparte na niektórych pól formularza, a nie sprawdzanie jednostki oparte na inny? Z góry dzięki.

Odpowiedz

16

W SymfonyForm\ChangePasswordType można użyć coś takiego:

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

Od Symfony 2.1 można skonfigurować opcje, aby uniknąć złamane nazwę elementu (jak wspomniano w komentarzu)

$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

Dzięki, było to bardzo pomocny. – Ris90

+1

To również zadziałało. Dzięki. Jednak zmieniłem jedną rzecz. Użyłem 'password' i' password_confirmation' zamiast 'Password' i' Password confirm'. Jeśli użyjesz tego ostatniego, otrzymasz niezręczne nazwy elementów, takie jak 'vnn_pressboxbundle_preferencestype_password_Confirm password'. –