2012-06-08 39 views
28

Tôi làm việc với Symfony2 và tôi muốn tạo biểu mẫu đăng ký. Tôi không muốn sử dụng FOSUserBundle.Symfony 2: Thêm phần tử biểu mẫu tùy chỉnh, không phải trong một thực thể

Vì vậy, tôi có thể tạo một tài khoản Entity (với các lĩnh vực: username, password, email ...) và tôi có thể tạo các hình thức:

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

Bây giờ, tôi muốn thêm một lĩnh vực xác nhận cho mật khẩu. Tuy nhiên, khi tôi cố gắng thêm một lĩnh vực với phương thức add(), ví dụ như "password_confirmation" Tôi có điều này:

Cả tài sản "password_confirmation" hay phương pháp "getPasswordConfirmation()" hay phương pháp "isPasswordConfirmation() "tồn tại trong lớp" Ứng dụng \ FrontBundle \ Entity \ Account "

Làm cách nào để thêm trường tùy chỉnh? Và sau đó, làm thế nào để hợp lệ?

Cảm ơn bạn. BR.

Trả lời

49

Trong trường hợp bình thường, bạn cần chỉ định rõ ràng rằng * password_confirmation * không phải là một phần của đối tượng, sử dụng tùy chọn property_path.

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

Sau đó xác thực bằng CallBackValidator.

Nhưng, trong trường hợp cụ thể này, nơi bạn muốn lặp lại một trường, tiện ích repeated có thể làm điều đó cho bạn.

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

Cảm ơn bạn rất nhiều;) –

+0

Câu trả lời hoàn hảo. – rjmunro

+0

Cảm ơn bạn rất nhiều. – iizno

61

Bản cập nhật cho Symfony 2.1:

property_path đã phản đối và thay vào đó bạn nên sử dụng mapped. Cú pháp vẫn giữ nguyên:

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

Nó cũng hoạt động cho Symfony 3.0 – yeouuu

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