2012-01-31 32 views
5

Tôi đang cố gắng thực hiện chức năng thay đổi mật khẩu trong dự án Symfony 2. Tôi có tổ chức User với các quy tắc xác thực trong validation.yml tệp. Trong thực thể User Tôi có trường "password" với các ràng buộc xác thực trong validation.yml.
Tôi đã tạo biểu mẫu với 2 trường 'password' và 'confirmPasswod'. Tôi muốn sử dụng các ràng buộc xác thực đối tượng của mình cho trường 'mật khẩu' và kiểm tra sự bình đẳng giữa các trường 'passwod' và 'confirmPassword'. Trong contronller của tôi, tôi viếtXác nhận các trường bằng nhau trong Symfony 2

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

Trong thực thể 'Người dùng' Tôi không có trường 'confirmPasswod'. Vì vậy, tôi gặp lỗi:

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

Có cách nào để sử dụng xác thực biểu mẫu dựa trên thực thể cho một số trường biểu mẫu chứ không phải xác thực dựa trên thực thể cho trường khác không? Cảm ơn trước.

Trả lời

16

Trong SymfonyForm\ChangePasswordType bạn có thể sử dụng một cái gì đó như thế này:

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

Kể từ Symfony 2.1, bạn có thể cấu hình tùy chọn để tránh tên phần tử bị hỏng (như đã đề cập trong bình luận)

$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

Cảm ơn, điều này là rất Hữu ích. – Ris90

+1

Điều này cũng phù hợp với tôi. Cảm ơn. Có một điều tôi đã thay đổi, mặc dù. Tôi đã sử dụng 'password' và' password_confirmation' thay vì 'Password' và' Password confirmation'. Nếu bạn sử dụng sau này, bạn kết thúc với các tên phần tử khó xử như 'vnn_pressboxbundle_preferencestype_password_Confirm password'. –

Các vấn đề liên quan