Phần 1 - Cách xử lý 1 request của Zend Framework 1.x - Work Flow

Phần 1 - Cách xử lý 1 request của Zend Framework 1.x - Work Flow

Đa số chúng ta làm việc với Zend Framework (ZF) nhưng cũng không nắm rõ lắm luồn dữ liệu được xử lý như thế nào? Một request URL đến, thì ZF đã làm gì để rã ra thành một module, controller, action và những tham số input để từ đó chúng ta tiến hành xử lý?

Cách xử lý 1 request của Zend Framework 1.x - Work Flow

Bài viết mang một khía cạnh minh họa và giảng lược bằng hình ảnh để giúp những người đã từng có kinh nghiệm làm việc với ZF hiểu rõ cơ chế vận hành như thế nào.

Để rào trước đón sau, mình chỉ dám nói đây là tiến trình xử lý của ZF1 chứ không dám khẳng định ZF2 cũng y như vậy. ZF2 đã có 1 số cải tiến rất rõ về bộ library không biết có thay đổi về work flow không thì mình vẫn chưa thể khẳng định tại thời điểm này.

Đây là tiến trình đầu tiên khi một user gửi 1 request lên website ZF, tất cả luồng dữ liệu đều được tập trung vào tập tin index.php (nếu chúng ta chưa thay đổi gì thì nó sẽ nằm trong thư mục public của ứng dụng). Tại vị trí này, ứng dụng sẽ kích hoạt Zend_Application và gọi vào tầng boostrap của ứng dụng. Nguyên sơ khởi khi cài đặt ZF thì class Bootstrap trắng trơn, và nếu chúng ta viết không đúng cách thì website chúng ta ra “trắng tinh” hoặc thậm chí quăng lỗi.

Trong Bootstrap, ZF sẽ khởi tạo đối tượng Front Controller (FC) – đây là 1 đối tượng khởi động 1 lần duy nhất bởi ZF, chúng ta không thể new mới mà chỉ có thể sử dụng lại – và sau đó đối tượng này sẽ kích hoạt toàn ứng dụng ZF bởi hàm Dispatch

Sau khi Bootstrap kích hoạt ZF bởi việc gọi hàm Dispatch thì sẽ đến tiến trình như hình bên trên, tiến trình này được chia là 3 khối Front Controller, Plugin Broker, Router.

Đầu tiên hết, Front Controller sẽ khởi tạo đối tượng request, đối tượng response nếu nó chưa được khởi tạo lần nào (vấn đề này như thế nào, tôi sẽ trình bày rõ hơn trong phần sau) rồi đem 2 đối tượng này quăng cho khối Plugin Broker xử lý.

Plugin Broker nhận được yêu cầu từ Front Controller, sẽ kiểm tra xem tại đây có 1 controller plugin nào được viết với hàm routeStartup không, nếu có thì chạy hàm này, và sau đó thì gửi kết quả về cho Front Controller. Tại thời điểm này, URI do người dùng nhập vào vẫn chưa được rã thành module, controller, action và những tham số tương ứng. Sau khi Front Controller nhận được kết quả từ Plugin Broker sẽ kích hoạt khối Router

Router nhận thông điệp từ Front Controller, sẽ tiến hành rã URI của người thành module, controller, action và những tham số truyền vào tương ứng bằng việc tìm xem trong danh sách routes có cái nào khớp với URI mà người dùng đang yêu cầu. Router sẽ “nhúng” những tham số này vào đối tượng request được sinh ra ở bước đầu để có thể dùng nếu cần. Router kết thúc quá trình của nó bằng việc gửi thông điệp lại cho khối Front Controller. Cho nên tại đây, nếu ứng dụng chúng ta có quá nhiều router (rule rewrite url) thì sẽ làm cho tiến trình này chậm đáng kể, ảnh hưởng trực tiếp đến tốc độ website.

Kết thúc cho tiến trình này bằng việc khối Front Controller kiểm tra xem có 1 controller plugin nào viết hàm routeShutdown không, nếu có thì thực hiện và sẽ đẩy tới 1 tiến trình khác

Theo Minh Quang Trần

Bạn thấy bài viết này như thế nào?: 
Average: 9.5 (2 votes)
Ảnh của Tommy Tran

Tommy owner Express Magazine

Drupal Developer having 9+ year experience, implementation and having strong knowledge of technical specifications, workflow development. Ability to perform effectively and efficiently in team and individually. Always enthusiastic and interseted to study new technologies

  • Skype ID: tthanhthuy

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Tai nghe ứng dụng công nghệ giao tiếp trường gần

Tai nghe ứng dụng công nghệ giao tiếp trường gần

Công nghệ Near Field Communication (N.F.C – giao tiếp trường gần) cho phép dữ liệu được trao đổi giữa hai thiết bị trong một khoảng cách rất ngắn

5 Tips giúp bạn trở thành Gitt administer tại drupal.org

5 Tips giúp bạn trở thành Gitt administer tại drupal.org

Tips to become a git administer at drupal.org

Giới thiệu các thành phần trong server mail

Giới thiệu các thành phần trong server mail

Để cài đặt một máy chủ email, có nhiều cách làm, nhiều lựa chọn. Sau đây là một lựa chọn

Tomdesgin.vn

 

Drupal Services