Khanh Hoang - Kenn
Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.
Sau khi tiến trình xử lý Routing kết thúc, ZF sẽ kích hoạt tiến trình preDispatch, đây là tiến trình được xử lý trước các action trong controller của ZF.
Tiến trình được xử lý đầu tiên bằng việc Plugin Broker kiểm tra xem có một controller plugin nào được thiết lập phương thức dispatchLoopStartup hay không, nếu có thì thực thi phương thức này của controller plugin, sau đó Plugin Broker sẽ thông báo ngược lại với Front Controller đã hoàn tất quá trình loop startup và từ đây Front Controller sẽ gắn trạng thái TRUE vào cờ isDispatch của đối tượng Request (xem lại phần 1), Front controller sẽ tiến tới quá trình xử lý preDispatch, như vậy tại đây chúng ta sẽ thấy rằng Loop Dispatch là tiến trình chạy trước preDispath.
Front Controller lại đẩy sang Plugin Broker để kiểm tra xem có controller plugin nào đó được thiết lập phương thức preDispatch hay không, nếu có thì thực thi phương thức. Tại đây, khối Front Controller sẽ kiểm tra xem cờ isDispatch có được reset thành FALSE hay không? Nếu có, quá trình sẽ được lặp lại bước trên (do đó nó có tên là LOOP STARTUP). Ngược lại, tức là cờ isDispatch vẫn đang ở trạng thái TRUE thì Front Controller sẽ triệu gọi action trong controller tương ứng lên thực thi. Tiến trình này được gọi là Controller Dispatch
Tiến trình Controller Dispatch sẽ load file controller class tương ứng lên, đồng thời kích hoạt luôn helper broker lên để đăng ký action vào đây. Nó sẽ thực thi phương thức preDispatch trong class controller đó, sau đó nó kiểm tra xem có thể thực thi action mà người dùng đang mong chờ không, nếu có thể thực hiện được, nó sẽ thực thi action đó và tiếp đó là tới postDispatch. Cuối cùng nó sẽ gửi thông điệp response về cho Front Controller, để tiếp tục qua tiến trình post dispatch của khối front controller.
Tiến trình postDispatch ở khối Front Controller bắt đầu bằng việc nhờ khối Plugin Broker kiểm tra xem có thể thực thi phương thức dispatchLoopShutdown nào của controller plugin không? Xong việc, Front Controller sẽ gửi đối tượng response về. Đối tượng response sẽ gửi header về trước rồi tối khối Body cho user. Như vậy là kết thúc quá trình xử lý trong ZF 1.x
Hy vọng bài viết có thể giúp mọi người có cái nhìn tổng quan và hiểu phần nào cách xử lý trong ZF 1.x
Theo Minh Quang Trần