Bài 02 - MÔ HÌNH MVC TRONG PHP (tt)
2. Mô hình MVC trong PHP nâng cao
Tổ chức cơ bản của một ứng dụng MVC
1. Giới thiệu
Xin chào các bạn, hôm nay tôi lại sắp xếp được thời gian để quay trở lại với các bạn trong loạt bài về MVC nâng cao. Loạt bài này tôi sẽ kết hợp mô hình MVC với lập trình hướng đối tượng thông qua một ví dụ thực tế. Để có thể học tốt được loạt bài này thì những bạn chưa biết gì về MVC nên xem qua loạt bài MVC trong PHP cơ bản của tôi nhé.
2. Cấu trúc thư mục ban đầu
Trong đó
• Thư mục models: Chứa các file lưu trữ dữ liệu, tương tác với CSDL
• Thư mục views: Chứa các file giao diện hiển thị hoặc giao diện nhận dữ liệu trả về từ Controller
• Thư mục controllers: Chứa các file Controller chuyên để xử lý và điều hướng dữ liệu
• Thư mục library: Chứ các file tiện ích kiểu thư viện như kết nối, autoload,…
• File chạy chính index.php: Ứng dụng của chúng ta luôn luôn và chỉ chạy duy nhất một file này, còn lại tất cả các file khác đề chạy ngầm dưới file chạy chính này.
3. Tổ chức tệp tin
Loạt này bài này tôi sẽ hướng dẫn các bạn xây dựng một ứng dụng nhỏ liên quan đến quản lý thành viên, nghe có vẻ đao to búa lớn nhưng thực chất chủ yếu là liệt kê dữ liệu theo mô hình MVC, còn ứng dụng hoàn chỉnh và phức tạp có kết nối CSDL và những thuật toán lằng nhằng thì xin hẹn các bạn vào một Video Tut khác khi tôi có nhiều thời gian hơn. Tuy nhiên nếu như các bạn nắm chắc phần này thì hoàn toàn có khả năng tự xây dựng được một ứng dụng phức tạp (website hoàn chỉnh chẳng hạn) bằng MVC rồi nhé.
Trong thư mục models các bạn tạo cho tôi thư mục con user (để quản lý chức năng user), đồng thời trong thư mục user thì các bạn tạo tiếp cho tôi một lớp User (User.php) để xử lý các theo tác liên quan đến User như: login, add, edit, del, listed,…
Nội dung code của file lớp User này sẽ như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Tiếp đến là thư mục library, thư mục trong ứng dụng này của tôi chỉ chứ duy nhất file __autoload.php để xử lý triệu gọi lớp một cách tự động khi đối tượng được khởi tạo, trong này cũng có thể đặt lớp Database nếu các bạn cần sử dụng đến nó trong ứng dụng.
Nội dung code của file __autoload.php này sẽ như sau:
1
2
3
4
5
Tiếp theo là tổ chức tệp tin của thư mục controllers. Trong thư mục này các bạn cũng tạo cho tôi thư mục user để quản lý các thao tác với User. Trong thư mục user các bạn lại tạo tiếp cho tôi các file theo cấu trúc sau:
Trong đó
• user.php là Controller chính trong chức năng quản lý User này (tùy vào tham số GET nhận được là gì thì nó sẽ triệu gọi các Controller con tương ứng)
• Các file như login.php, add.php, edit.php, del.php. listed.php là những Controller con cho từng hành động cụ thể như đăng nhập, thêm, sửa, xóa, liệt kê.
Nội dung code của Controller chính (User.php) sẽ như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Đến thư mục views, thư mục này các bạn tạo thêm cho tôi một thư mục con user để chứa các giao diện của chức năng quản lý User, đồng thời các bạn tạo luôn các file giao diện phục vụ chức năng này trong thư mục user mới tạo nhé
Cuối cùng là file chạy chính index.php, file này xử dụng để triệu gọi các thư viện (SESSION, Autoload,…), gọi các Controller phù hợp để xử lý khi có các tham số GET Controller được truyền lên.
Và nội dung code của file này như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Vietpro PHP MVC
Trên đây là cấu trúc cơ bản của một ứng dụng theo mô hình MVC, ở các bài tiếp theo chúng ta sẽ hoàn thiện các chức năng của ứng dụng dự hoàn toàn trên tổ chức thư mục và tệp tin của bài này nhé.
[ SOURCE CODE ]
• Code mẫu của bài viết này, các bạn vui lòng download ở đây Source code
Hoàn thiện ứng dụng MVC
1. Giới thiệu
Ở bài trước chúng ta đã cùng nhau tạo ra được một cấu trúc thư mục và các tệp tin chuẩn theo mô hình MVC cho ứng dụng, và chúng ta cũng đã biết được ứng dụng của mình là quản lý thành viên (User) với các tính năng hiển thị các thông báo login, add, edit, del, listed.
Ở bài này chúng ta sẽ hoàn thiện các chức năng trên, tuy nhiên các chức năng này là giống nhau nên tôi chỉ hướng dẫn các bạn hoàn thiện các chức năng như login, listed, còn các chức năng còn lại các bạn có thể tự thực hành nốt nhé (dễ mà)
Các bạn xem thêm các bài học về mô hình MVC cơ bản tại đây.
2. Hoàn thiện Controller Login và Listed
Các bạn vào các Controller login và listed thông qua các file login.php và listed.php và hoàn thành nội dung code như sau nhé:
login.php
1
2
3
4
5 login();
include_once('views/user/login_view.php');
?>
listed.php
1
2
3
4
5 listed();
include_once('views/user/listed_view.php');
?>
3. Hoàn thiện View Login và Listed
Các bạn vào các View login và listed thông qua các file login_view.php và listed_view.php và hoàn thành nội dung code như sau nhé:
login_view.php
1
2
3
listed_view.php
1
2
3
4. Chạy ứng dụng
Nào, bây giờ chúng ta cùng nhau chạy thử ứng dụng thông qua việc truyền Controller và các Action xem kết quả hiển thị trên trình duyệt sẽ như thế nào nhé.
Ứng dụng của chúng ta đến đây coi như tạm ổn, các bạn hãy về hoàn thiện nốt các tính năng add, edit, del cho ứng dụng này nhé.
[ SOURCE CODE ]
• Code mẫu của bài viết này, các bạn vui lòng download ở đây Source code
Chạy ứng dụng với nhiều Controller
1. Giới thiệu
Ở những bài trước chúng ta xây ứng dụng quản lý thành viên và mặc nhiên chúng ta chỉ cần sử dụng duy nhất một lớp đó là Class User (User.php), và điều này được thể hiện rõ nét khi chúng ta fix cứng Autoload với code như sau mà các bạn đã biết
1
2
3
4
5
Nếu như bây giờ tôi tạo thêm các Model, View, Controller cho chức năng quản lý sản phẩm thì sẽ như thế nào. Rõ ràng nhìn vào Autoload các bạn sẽ dễ dàng nhận ra một điều đó là hệ thống luôn luôn đi vào thư mục Model user để gọi lớp xử lý, và điều này là sai hoàn toàn.
Vậy bài hướng dẫn này chúng ta sẽ cùng nhau hoàn thiện ứng dụng của loạt bài trước thông qua việc chạy nhiều Controller khác nhau và Autoload vẫn tự động tìm tới được các Model tương ứng để phục vụ cho các Controller đó.
2. Nội dung file chạy chính
File chạy chính của ứng dụng vẫn là index.php như những bài trước, nội dung vẫn giữ nguyên không có gì thay đổi, tôi chỉ viết lại để các bạn hình dung ra được công việc của bài này
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Untitled Document
Các bạn chỉ lưu tâm đến đoạn sau ở code trên cho tôi nhé
1
2 case 'product': include_once('controllers/product/product.php');
break;
Trên đây chính là code để chạy Controller sản phẩm đấy.
3. Khởi tạo Model Product
Trong thư mục models, các bạn tạo cho tôi thư mục con product, và trong thư mục này các bạn tiếp tục tạo cho tôi lớp Model Product (Product.php)
Nội dung code của Class này sẽ như sau:
1
2
3
4
5
6
7
8
4. Khởi tạo Controller Product
Trong thư mục controllers, các bạn tạo cho tôi thư mục con product, và trong thư mục này các bạn tiếp tục tạo cho tôi các file theo cấu trúc sau:
Nội dung code lần lượt của các file product.php và listed.php như sau:
product.php: đây là Controller chính của chứng năng quản lý sản phẩm này
1
2
3
4
5
6
7
8
9
10
listed.php: đây là Controller đại diện cho hành động liệt kê các sản phẩm
1
2
3
4
5 listed();
include_once('views/product/listed_view.php');
?>
5. Khởi tạo View Product
Cuối cùng các bạn vào thư mục views để tạo cho tôi thư mục product, trong thư mục này các bạn tạo tiếp cho tôi file listed_view.php để hiện thị dữ liệu
Nội dung code của file này sẽ như sau
1
2
3
6. Hoàn thiện ứng dụng
Bây giờ các bạn hãy chạy ứng dụng để xem kêt quả hiển thị trên trình duyệt sẽ như thế nào nhé.
Các bạn thấy, chương trình thông báo là không tìm thấy lớp Product, bởi vì như tôi đã giải thích ngay phần đầu, Autoload của chúng ta nó sẽ tìm lớp Product trong thư mục user. Để giải quyết điều này thì chúng ta chỉ cần vào file __autoload.php sửa lại một chút là xong.
__autoload.php
1
2
3
4
5
6
Trong đó
• Biến $GLOBALS là biến toàn cục của toàn cục, hay có thể gọi nó là siêu toàn cục vì nó có thể được truy cập từ bất cứ vị trí nào trên file cho dù ở trong hay ngoài hàm.
Chúng ta cùng nhau chạy thử ứng dụng lần cuối để chiêm ngưỡng thành quả cũng như kết thúc có hậu cho loạt bài hướng dẫn về mô hình MVC trong PHP của tôi ở đây nhé.
[ SOURCE CODE ]
• Code mẫu của bài viết này, các bạn vui lòng download ở đây Source code