Mô Hình MVC của CakePHP

Cũng như các PHP framework khác, CakePHP hoạt động theo mô hình MVC. Mô hình MVC trong CakePHP chia ứng dụng ra ba phần chính: Model, View và Controller, việc phân tách ứng dụng rõ ràng như vậy sẽ giúp bạn tách bạch các phần xử lý riêng biệt cho website của bạn, nó giúp cho code của bạn trong sáng hơn, dễ lập trình, dễ quản lý, chỉnh sửa, nâng cấp. Trong đó:

-          Model: mô tả dữ liệu của ứng dụng. Trên Model ta có thể thiết lập các ràng buộc dữ liệu, quan hệ giữa các bảng. Model giao tiếp với database, bạn sẽ viết các query cũng như các xử lý logic  ở đây.

-          View: đảm nhận việc hiển thị thông tin đã được xử lý gới đến từ Controller, View còn được hiểu nôm na là nơi chứa các file html của bạn để hiển thị cho nguời xem.

-          Controller: xử lý và điều hướng các yêu cầu của client, Controller nơi bạn trực tiếp viết các xử lý lấy các request từ url và form để thao tác trực tiếp với Model, sau đó dùng View để hiển thị ra

Ta có mô hình cơ bản như sau:

Mo hinh MVC

Mô Hình MVC

Cách thức hoạt động:

  •     Đầu tiên client sử dụng web browser để gởi yêu cầu đến ứng dụng bằng cách gõ hoặc click vào một đường link liên kết có dạng sau:
http://{Domain}.com/{Application}/{Controller}/{Action}/{Parameter 1, etc.}
  •     Bộ phận điều vận Dispatcher (là một thành phần của CakePHP) sẽ kiểm tra phần tử để xác định controller nào sẽ thực thi  và gởi yêu cầu tới controller tương ứng
  •     Khi yêu cầu được gởi đến Controller, nó sẽ làm một vài thao tác luận lí cần thiết, có thể nó sẽ xử lý ngay tại Controller hoặc sử dụng Model tương ứng để truy xuất dữ liệu. Dữ liệu ở đây có thể là các record trong table của một database, hoặc một dạng khác.
  •     Sau khi lấy được dữ liệu, Controller sẽ đưa dữ liệu này ra View và View này có nhiệm vụ chuẩn bị đưa dữ liệu đầu ra. View có thể chuẩn bị dữ liệu ở dạng HTML, PDF, tài liệu XML hoặc một đối tượng JSON, cuối cùng là view sẽ được hiển thị trên trình duyệt.


TAGS: mvc controller view model



Comments

Jack 2011-06-08 08:32:11

Cảm ơn bạn.

huetoday 2011-09-15 10:18:16

Bạn ơi, bạn có thể giải thích thêm cho mình về Dispatcher được ko? Mình đã nghe nói đến cái này nhiều ở Joomla hoặc ở các PHP Framework khác nhưng chưa hiểu rõ bản chất lắm!
Thanks

HT 2011-09-16 08:38:24

@huetoday: chào bạn, thực tế thì mình cũng không biết nhiều về dispatcher trong CakePHP lắm. Theo mình hiểu thì nó là một thành phần trong CakePHP, nôm na giống như một phiên dịch viên vậy, khi bạn gọi đến một action nào đó thông qua url, thì nó lấy giá trị của url đó và chuyển đổi nó thành các lời gọi đến các controller tương ứng, bên cạnh đó dispatcher giúp thiết lập các trang lỗi, hoặc các cảnh báo khi bạn yêu cầu một url không chính xác, hay một số trục trặc về các lỗi hệ thống, lỗi lập trình...
Thường thì dispatcher là trong suốt đối với người dùng, các phương thức của nó là private tuy nhiên, có một số phương thức trong đó được public và có thể gọi trực tiếp đến nó.
Trên đây là một vài điều mình tìm hiểu được, thân mến! :)

huetoday 2011-09-16 20:10:08

Ok. thanks bạn. Mình đã hiểu được phần nào rồi.

tiennt 2012-03-04 06:50:55

Chào bạn, cho mình hỏi là cái model dùng để truy vấn và tương tác với Database, nhưng mình ko rõ lắm khi nào mình sẽ dùng cái model này, vì nhiều bài trong này thì truy vấn database toàn thấy viết luôn ở phần Cotroller rùi gán cho một biến và ko dùng đến Model, Bạn có thể giải thích khi nào viết code ở Model giúp mình nhé. Thank bạn.

HT 2012-03-09 08:09:31

@tiennt: Chào bạn, bạn viết code ở model khi cần xử lý các mối quan hệ giữa các model với nhau(belongto, hasmany...) và khi cần kiểm tra dữ liệu(validate) từ form lúc đưa vào CSDL. Còn lại các code khác đa số tập trung ở controller để xử lý dữ liệu.
Khi bạn dùng cake console để sinh code tự động thì bắt buộc phải tạo model trước rồi tới controller rồi sau đó là view. Nhưng nếu là code viết tay thì chỉ cần controller và view là có thể chạy được, nhưng lúc đó dữ liệu của các bạn sẽ không có quan hệ với nhau do không có model để định nghĩa các mối quan hệ giữa chúng.
Trên đây là một số điều mình hiểu, hi vọng giúp bạn có cái nhìn rõ ràng hơn về CakePHP cũng như mô hình mvc :)
Thân mến!

tiennt 2012-03-09 09:41:02

Hì thank bạn rất nhiều, mình muốn code tay từng phần trong mô hình MVC để mình có thể hiểu rõ nó, nên ko dùng cake console. Mình mới biết đc, khi VC mà ko dùng đến database thì có thể khai báo biến var $useTable=false trong model, và còn nhiều biến khác như var $helpers, var $components... ko biết bạn có thể chỉ cho mình tìm hiểu tác dụng của các biến đó ở trang nào đc ko, hoặc giải thích qua cho mình hiểu, Hihi. Cám ơn bạn

HT 2012-03-12 06:35:43

Các biến var $helpers là dùng để khai báo sử dụng helper, var $components là khai báo component, ngoài ra còn có behavior nữa, helper thì dùng để sử dụng trên view, component thì dùng trong controller, còn behavior thường dùng trong model. CakePHP có sẵn rất nhiều thư viện helper, component và behavior, hoặc bạn có thể tự viết để sử dụng chúng. Để tham khảo cách sử dụng các helper, component, hay behavior bạn tham khảo cookbook trên cakephp.org nhé (link: http://book.cakephp.org). Trên CakePHPViet cũng có nhưng chỉ giới thiệu một vài cái cơ bản thôi :)
Thân mến!

Comment