2012-03-10 23 views
25

Đây là lớp FormEvents từ kho lưu trữ Symfony2 trên github. Nó được liên kết từ bài viết chính, How to Dynamically Generate Forms Using Form Events.Mô tả các sự kiện biểu mẫu của Symfony2?

Bất kỳ ai cũng biết chính xác khi nào các sự kiện này được gọi trong luồng?

namespace Symfony\Component\Form; 

/** 
* @author Bernhard Schussek <[email protected]> 
*/ 
final class FormEvents 
{ 
    const PRE_BIND = 'form.pre_bind'; 
    const POST_BIND = 'form.post_bind'; 
    const PRE_SET_DATA = 'form.pre_set_data'; 
    const POST_SET_DATA = 'form.post_set_data'; 
    const BIND_CLIENT_DATA = 'form.bind_client_data'; 
    const BIND_NORM_DATA = 'form.bind_norm_data'; 
    const SET_DATA = 'form.set_data'; 
} 

Trả lời

65

Có hai loại sự kiện:

DataEvent - read-only truy cập vào các dữ liệu mẫu. Các sự kiện 'Trước' và 'Đăng' là chỉ đọc.

FilterDataEvent - sự kiện cho phép sửa đổi dữ liệu biểu mẫu.

biểu mẫu.pre_bind DataEvent được kích hoạt trước khi dữ liệu bị ràng buộc vào biểu mẫu. Kích hoạt bởi Symfony\Component\Form\Form::bind()

form.post_bind DataEvent kích hoạt sau khi dữ liệu được liên kết với biểu mẫu. Kích hoạt bởi Symfony\Component\Form\Form::bind()

form.pre_set_data DataEvent kích hoạt trước khi lĩnh vực được làm đầy với các dữ liệu mặc định. Kích hoạt bởi Symfony\Component\Form\Form::setData()

form.post_set_data DataEvent kích hoạt sau khi lĩnh vực được làm đầy với các dữ liệu mặc định. Kích hoạt bởi Symfony\Component\Form\Form::setData()

form.bind_client_data FilterDataEvent kích hoạt trước khi dữ liệu được liên kết với biểu mẫu. Kích hoạt bởi Symfony\Component\Form\Form::bind()

form.bind_norm_data FilterDataEvent kích hoạt sau khi dữ liệu đã được bình thường hóa. Được kích hoạt bởi Symfony\Component\Form\Form::bind(). Xem Symfony\Component\Form\Extension\Core\EventListener\FixUrlProtocolListener (bổ sung bởi các UrlType cho một ví dụ)

form.set_data FilterDataEvent kích hoạt khi dữ liệu mặc định đã được ràng buộc. Được kích hoạt bởi Symfony\Component\Form\Form::setData()

Tôi khuyên bạn nên poking quanh lớp biểu mẫu để có cảm nhận tốt hơn về thời điểm các sự kiện này được kích hoạt và cách bạn có thể sử dụng chúng.

+0

Thực sự cảm ơn bạn, câu trả lời đã được chấp nhận! Trong khi đó tôi đang gặp một số vấn đề với các sự kiện hình thức, nếu bạn có một số thời gian rảnh rỗi có lẽ bạn có thể cho tôi một chút giúp đỡ: http://stackoverflow.com/questions/9661026/accessing-a-form-field-from- a-subscriber-of-a-form-event-in-symfony2 – Polmonino

+14

Cần lưu ý rằng mô tả về các sự kiện biểu mẫu này chỉ hợp lệ đối với Thành phần biểu mẫu Symfony 2.0. Các sự kiện sau đây đã không được dùng nữa kể từ 2.1 và sẽ bị xóa là 2.3: 'form.bind_client_data',' form.bind_norm_data', 'form.set_data'. Kể từ 2.1, các trình lắng nghe sự kiện biểu mẫu giờ đây nhận được một đối tượng 'FormEvent' thay vì các đối tượng' FilterDataEvent' và 'DataEvent' không được chấp nhận, sẽ bị loại bỏ trong 2.3. –

+0

Hey @xanido, liên kết của bạn bị hỏng. – Mick

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