1. Giới thiệu về mô hình MVC trong PHP (Model, Controller, View)

Mô hình MVC (model, controller, view) là mô hình chuẩn cho ứng dụng web được sử dụng nhiều nhất ngày nay. Mô hình MVC được sử dụng lần đầu tiên trong Smalltalk, sau đó được sử dụng phổ biến trong ngôn ngữ lập trình Java. Hiện nay, đã có hơn hàng chục PHP framework dựa trên mô hình này.
Bạn biết đấy, mô hình MVC hiện nay rất phổ biến trong các framework PHP, nhưng thực sự rất khó để tìm một bài viết với hướng dẫn chi tiết kèm theo những ví dụ đơn giản để chúng ta có thể hiểu được về nó. Đó là mục đích của hướng dẫn này
Mô hình MVC là viết tắt của 3 chữ Model, View, Controller. Mô hình này tách một ứng dụng web ra làm 3 thành phần đảm nhiệm chức năng tách biệt, thuận tiện cho việc xử lý và bảo trì

  • Model : Chịu trách nhiệm quản lý dữ liệu, nó lưu trữ và truy xuất các thực thể từ cơ sở dữ liệu như mysql, sql server, postresSQL,… đồng thời chưa các logic được thực thi bởi ứng dụng
  • View : Chịu trách nhiệm hiển thị dữ liệu đã được truy xuất từ model theo một format nào đó theo ý đồ của lập trình viên. Cách sử dụng của View tương tự như các module templates thường thấy trong các ứng dụng web phổ biến như WordPress, Joomla,…
  • Controller : trung gian, làm nhiệm vụ xử lý cho model và view tương tác với nhau. Controller nhận request từ client, sau đó gọi các model để thực hiện các hoạt động được yêu cầu và gửi ra ngoài View. View sẽ chịu trách nhiệm format lại data từ controller gửi ra và trình bày dữ liệu theo 1 định dạng đầu ra (html).
    Hình minh họa dưới đây sẽ cho bạn thấy rõ cách mô hình MVC hoạt động

mô hình mvc

2. Từng bước thực hành ví dụ về mô hình MVC

Đầu tiên, trong thư mục gốc của website ở local (với wamp thì là www, với xampp thì là htdocs), bạn tạo một folder đặt tên là mvc với cấu trúc thư mục như sau :

cấu trúc mvc

a. Controller

Đầu tiên chúng ta sẽ làm việc với controller, đây là nơi đầu tiền nhận các yêu cầu (requests), phân tích yêu cầu, khởi tạo và gọi model, sau đó nhận các hồi đáp (response) từ model và gửi ra các lớp giao diện (view). Trong thực tế Controller được gọi từ điểm đầu vào của ứng dụng là tập tin index.php. Tập tin này sẽ giao toàn bộ các yêu cầu gửi từ client cho controller xử lý.

Trong tập tin index.php ta thêm gõ đoạn code sau:

Trong tập tin Controller.php của chúng ta sẽ tạo ra 1 function là invoke và một hàm khởi tạo contructor. Hàm contructor chịu trách nhiệm gọi và khởi tạo lớp Model. Trong hàm invoke sẽ quyết định data nào được phép trả ra từ model. Sau đó nó gọi model để lấy dữ liệu cần thiết, sau đó gửi dữ liệu ra view. Đoạn code cực kỳ đơn giản bên dưới sẽ cho bạn thấy điều đó. Lưu ý rằng, Controller không biết gì về cấu trúc database như thế nào cũng như là data gửi ra ngoài view sẽ có hình thù như thế nào bạn nhé. Nó chỉ có nhiệm vụ gọi model bởi request từ client và gửi dữ liệu ra ngoài view thôi nhé

Mô hình dưới đây minh họa dễ hiểu hơn cho bạn

mô hình diagram mvc

b. Model

Model đại diện cho dữ liệu và logic của ứng dụng, thường hay gọi là business logic. Model có trách nhiệm :

– Thêm, xóa sửa dữ liệu,…

– Là nơi thực thi logic nghiệp vụ của ứng dụng. Đối với những bạn mới tìm hiểu về MVC, chúng ta thường nhầm lẫn và thực thì logic của nghiệp vụ ở bên trong Controller hoăc View

Ví dụ dưới đây cho chúng ta thấy lớp model được đại diện bởi 2 class là : “Model” và “Book”.

Class Book trong file Book.php

 c. View

View chịu trách nhiệm định đạng lại dữ liệu được truyền ra từ model. Dữ liệu được truyền ra có thể có nhiều định dạng khác nhau tùy vào cách người lập trình xử lý như là xml, json, array,..

Lưu ý là bạn đừng nên nhập nhằng, khó hiểu giữa view và template. Khi nhận được dữ liệu với định dạng nhất định từ hệ thống, tiếp tục view sẽ làm thao tác chuyển đổi dữ liệu thành một cấu trúc html cho người dùng thấy được. Thông thường 1 controller sẽ chỉ định gửi dữ liệu đến 1 view cụ thể. Chẳng hạn với công việc hiển thị tài khoản người dùng, thì Controller “display account” sẽ gọi đến lớp view “display account”. Tại đây, lớp view sẽ sử dụng 1 template có sẵn trong hệ thống để render ra các trang html. Mẫu template có sẵn này xử dụng lại những phần cố định của website như header, footer, menu,..

Đoạn code dưới đây cho ta 2 view dùng để hiển thị 1 quyển sách và nhiều quyền sách

viewbook.php

booklist.php

Các ví dụ trên của mình chính là cái nền cơ bản, cách hoạt động giống với các MVC Framework phổ biến hiện nay như CI,  Zend,…Hy vọng qua bài viết này, các bạn có cái nhìn rõ ràng hơn về mô hình MVC và học các framework nhanh hơn. Kết thúc bài viết mình sẽ liệt kê một số ưu điểm của MVC :

  • Model và View tách biệt, nên ứng dụng linh hoạt hơn, dễ bảo trì hơn các website truyền thống, một nùi code trong 1 file 🙂
  • Model và View có thể coi là tách biệt, độc lập. Có thể 1 máy chủ A chỉ làm nhiệm vụ xử lý Model, back-end, một máy chủ B chỉ làm nhiệm vụ xử lý giao diện, front-end,.

Bạn vẫn còn thắc mắc về bài viết, để lại comment bên dưới nhé . Thân ái và quyết thắng !

Nguồn tham khảo : PHP-HTML

 

Đánh giá bài viết

Mình là Hiếu.
Mình lập ra Kungfu PHP nhằm mục đích chia sẽ những gì mình biết đến với các bạn bao gồm các lĩnh vực như : tiền điện tử, kiếm tiền online, marketing, lập trình…
Hy vọng nơi đây là mái nhà chung để chúng ta có thể học tập và trao đổi với nhau, cùng nhau phát triển.
Chúc các bạn luôn vui !

Bạn có muốn tham gia nhóm thảo luận ICO tốt nhất ?

15 Comments Already

  1. Nếu làm MVC này theo hướng đối tượng thì làm sao hả anh. Anh có thể làm 1 bài hướng dẫn được ko ạ

  2. bài viêt bạn này khá hay ,khá tốt đó

  3. không nhìn thấy cái request từ client đâu

  4. Model là nơi thực thi logic nghiệp vụ của ứng dụng. Đối với những bạn mới tìm hiểu về MVC, chúng ta thường nhầm lẫn và thực thì logic của nghiệp vụ ở bên trong Controller hoăc View… Mình rất tâm đắc chỗ này, Như bạn nói về cơ bản thì Controller không hề phải xử lý một chút logic nào theo yêu cầu của Client đúng không? Tất cả việc lấy data và xử lý data đều diễn ra ở trong Model… Nếu nói như vậy một khi hệ thống phưc tạp cần data ở nhiều table và phải xử lý rất nhiều logic… Cái này có thể làm ở trong Model không… Mình rất muốn nghe cách bạn giải quyết vấn đề này

  5. Bạn ơi cho mình hỏi ví dụ mình muốn đọc nội dung và hiển thị file demo.txt bằng cách dùng MVC thì làm như thế nào. Mình mới nghiên cứu CI nên chưa rõ. Mong bạn giúp mình, mail của mình là justinthinh307@gmail.com. Càm ơn bạn!

  6. cảm ơn bài viết của bạn nhé

  7. bạn có thể làm 1 bài hướng dẫn mvc thêm sửa xóa thành viên được ko, bạn vết rất hay và dễ hiểu. Thanks bạn

  8. Cái ví dụ này chạy sao bạn? Bạn thử code xong giống như trên rồi chạy thử có được ko? Sao mình chạy ko được vậy nhỉ?

    • có thông báo lỗi gì không bạn ?

    • dễ hiểu. Ở đây bạn chạy index.php tức không truyền tham số thì sẽ lấy toàn bộ danh sách sách. Còn có truyền tham só index.php? = value thì sẽ thẩy được 1 cuốn sách cụ thể

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

loading...