[Module User] - File Bootstrap admin
File bootstrap index.php
là file dùng để xử lý nhận request của người dùng, nghĩa là tất cả các request sẽ vào file này và từ file này sẽ điều hướng đến module hợp lý. Như vậy nhiệm vụ của file bootstrap sẽ tiếp nhận request từ client, phân tích request và gọi đến module tương ứng, nếu module không tồn tại thì sẽ gọi đến module thông báo lỗi.
Trước tiên chúng ta tìm hiểu lại cấu trúc folder của ứng dụng.
1. Phân biệt module và action trên URL
Cấu trúc URL của admin sẽ có dạng như sau: localhost/php_example/admin/index.php?m=ten_module&a=ten_action
.
Như vậy tên module là gì và tên action là gì? Để trả lời câu hỏi này trước tiên chúng ta quay lại cấu trúc folder của admin như hình dưới đây.
Bài viết này được đăng tại [free tuts .net]
Trong cấu trúc này thì mỗi module sẽ có nhiều file, mỗi file như vậy ta gọi là một action. Ví dụ với module user thì chúng ta có 4 action đó là add, delete, edit và list.
Vậy tại sao ta lại truyền tên module và tên action trên URL? Lý do đơn giản là dựa vào hai thông tin này mà file bootstrap sẽ gọi đúng tên module và tên action mà URL yêu cầu.
2. Viết file bootstrap index.php
Trong hệ thống admin thì file bootstrap chính là file admin/index.php
, vì vậy bạn mở file này lên và nhập vào đoạn code sau:
// Định nghĩa một hằng số bảo vệ project define("IN_SITE", true); // Lấy module và action trên URL $module = isset($_GET['m']) ? $_GET['m'] : ''; $action = isset($_GET['a']) ? $_GET['a'] : ''; // Trường hợp người dùng không truyền module và action // thì ta lấy module mặc định là common // và action mặc định là login if (empty($module) || empty($action)){ $module = 'common'; $action = 'login'; } // Tạo đường dẫn và lưu vào biến $path $path = 'modules/'.$module . '/' . $action . '.php'; // Trường hợp URL chạy đúng if (file_exists($path)) { include_once ('../libs/session.php'); include_once ('../libs/database.php'); include_once ('../libs/role.php'); include_once ('../libs/helper.php'); include_once ($path); } else { // Trường hợp URL không tồn tại thì thông báo lỗi include_once ('modules/common/404.php'); }
Sau khi kiểm tra module và action hợp lệ thì mình có thêm các thư viện mà ở các bài trước chúng ta đã làm.
include_once ('../libs/session.php'); include_once ('../libs/database.php'); include_once ('../libs/role.php'); include_once ('../libs/helper.php');
Trong đoạn code trên mình có comment giải thích rất rõ ràng rồi. Tuy nhiên có một câu hỏi mà có lẽ bạn cũng đang thắc mắc.
Hằng số IN_SITE dùng để làm gì?
Đây là hằng số dùng để bảo vệ Project. Vậy nó hoạt động như thế nào?
Quay lại các bài trước chút xíu. Giả sử bạn vào trình duyệt và gõ URL là localhost/php_example/libs/database.php
thì sẽ thấy vào bình thường, hoặc là bạn vào một file bất kì nào trong thư viện đều được, điều này thật là nguy hiểm bởi vì theo cấu trúc của ứng dụng thì mọi request đều phải vào file admin/index.php
. Mà một khi đã vào file admin/index.php
thì hằng số này sẽ được khởi tạo, lúc này ở các thư viện ta chỉ cần kiểm tra hằng số này có tồn tại hay không? Nếu không tồn tại thì tức là hacker đã cố ý xâm nhập vào nên ta sẽ ngăn chặn.
Bây giờ bạn vào tất cả các file trong hệ thống website trừ file bootstrap và đặt trên đầu mỗi file một đoạn code nhu sau:
if (!defined('IN_SITE')) die ('The request not found');
Ok như vậy là mọi thứ đã ổn rồi đấy, và chúng ta đã hoàn thàn xong file admin bootstrap.
Bây giờ bạn hãy thử vào một số module mà mình đa tạo sẵn xem có chạy không nhé, nếu không chạy thì hãy đăng câu hỏi và mình sẽ hỗ trợ.
2. Lời kết
Bài này có lẽ hơi phức tạp và khó theo dõi đối với những bạn mới học. Nhưng bạn đừng lo vì mình có quay video kèm theo nên bạn hãy xem thêm video nếu không hiểu nhé. Bài tiếp theo chúng ta sẽ viết phần database xử lý tha tác lấy danh sách, thêm, xóa và sửa thành viên.