Loạt bài viết hướng dẫn PHP nâng cao xây dựng website theo mô hình MVC ra đời là điều tất yếu của lịch sử. Sau nhiều đêm trăn trở, lăn lê bò trườn mình đã đưa ra được quyết định để đời này. Quyết định được xuất phát từ tình yêu quê hương đất nước. Từ con tim nhỏ bé nhưng được soi sáng bởi ánh sáng chói lóa và được sưởi ấm bởi ngọn lửa bất diệt của Đảng :)). Project này được xây dựng theo cách hoạt động của framework laravel. Và mình đã được hướng dẫn bởi leader Bùi Văn Nguyện khi xây dựng nó. Mình nghĩ là các bạn sẽ nhận được nhiều kiến thức hơn là các bạn tưởng tượng đấy :D. Xung phong !!!
PHP nâng cao xây dựng website theo mô hình MVC phần I
1.Xây dựng cấu trúc:
Triển khai luôn thôi nhỉ, đầu tiên thì chúng ta sẽ xây dựng cấu trúc thư mục của project như sau:
Ok chúng ta sẽ xây dựng project này với cấu trúc thư mục như trên, sản phẩm mà chúng ta sẽ thực hiện là xây dựng một trang blog nha các bạn :D. Và sau đây mình sẽ trình bày về nhiệm vụ của mỗi file trong project này.
index.php
Muốn hack được nasa bằng HTML thì đầu tiên chúng ta phải truy cập vào file index.php, mọi hoạt động của website sẽ được thực hiện ở đây. Từ file index.php này thì chúng ta sẽ bắt đầu gọi tên các file khác và bắt chúng làm một việc gì đó. Chẳng hạn như mình sẽ gọi file admin.php trong controller và thực hiện phương thức login. Thì chúng ta sẽ đăng nhập thôi. Tóm lại là code cần để thực hiện một hành động gì đó sẽ được đẩy về file index.php. Các bạn sẽ hiểu rõ hơn sau khi mình tiến hành code để kết nối các file.
Folder core
Chứa các file xử lý cơ sở dữ liệu, phân trang, tạo session, lấy giá trị của các biến globals,.. và load view về controller. Tất cả các file trong core sẽ được load về index.php.
Folder controller, model, view, asset, config
Các file này thì để thực hiên theo mô hình MVC thôi, một hành động sẽ được gọi đến controller, controller tương tác qua lại với model và view thực thi hành động đó. Model sẽ chứa các chức năng của website như đăng nhập thêm sửa xóa bài viết, .. Controller sẽ gọi những chức năng này để thực thi một yêu cầu tự người dùng. Các bạn phải nhớ rằng là controller sẽ không đụng đến database … nó như sếp ấy nó chỉ ra lệnh và trả kết quả về cho người dùng thôi còn việc xử lý dữ liệu là thằng model làm. Còn view là nơi để xây dựng giao diện cho website. File asset sẽ chứa các file css và js. Config là file chứa các thuộc tính cấu hình, chúng ta có thể đặt các giá trị của database như databasename, host, password …
2.Thiết lập hoạt động các file.
Chúng ta sẽ truyền 2 biến $_GET controller và action từ url vào file index.php. Nhiệm vụ của thằng controllerName để gọi file và tạo đối tượng, thằng action để gọi phương thức. Ví dụ http:localhost/php-mvc/index.php?controllerName=home&action=index
ý định của mình là sẽ tạo ra đối tượng home từ class home và gọi phương thức index trong folder controller ra thằng index.php. Để làm được điều này thì mình sẽ thực hiện như sau:
Như hình minh họa ở trên thì mình sẽ đẩy tất cả các file ở core về index.php. Có nghĩa là khi muốn thao tác với database chúng ta chỉ cần sử dụng thôi chẳng cần phải mất công include hay tạo mới đối tượng nữa. Tương tự với các file khác trong core.
Code index.php
<?php /* *Lấy value từ URL */ $controllerName = $_GET['controllerName']; $action = $_GET['action']; /* *Load loadfile.php */ include 'core/loadFile.php';
Code config.php
<?php /* *Dùng các biến $autoload và $autoloadModel để load tất cả các file trong core và model */ $autoload = [ 'controller', 'database', 'helper', 'input', 'pagination', 'session', 'validation', ]; $autoloadModel = [ 'Post', 'User', ];
Code loadFile.php
<?php include 'config/config.php'; /* *Lấy giạ trị từ mảng $autoloal và $autoloadModel trong file config.php *Load all file core vào index.php * đồng thời tạo ra các đối tượng * vd: class database từ file database.php * $database = new database(); */ foreach ($autoload as $file) { include 'core/' . $file . '.php'; $$file = new $file(); } /* *Load all file model * */ foreach ($autoloadModel as $file) { include 'model/' . $file . '.php'; } /* *Load file controller từ biến global $_GET['controllerName'] truyền vào từ URL */ if (file_exists('controller/' . $controllerName . '.php')) { include 'controller/' . $controllerName . '.php'; } else { echo ('File Not Found !!'); } /* *Tạo đối tượng file vừa load từ controller */ $controller = new $controllerName(); /* *Gọi method từ biến action truyền vào từ URL */ if (method_exists($controller, $action)) { $controller->$action(); } else { echo "Method not Found"; }
Code home.php
<?php class home { public function index() { echo "wellcome"; } }
Ok vậy là mình đã load luôn cả model vào index.php rồi. Mình sẽ test xem nó có hoạt động như mình mong muốn không nhé. Ở đây thì mình chưa code các file trong core. Mình sẽ hướng dẫn các bạn code tất cả các file trong folder core trong bài viết sau nhé. Nó khá chất chơi đấy :D. Bây giờ thì mình sẽ giả lập code file database.php như sau:
Code database.php
<?php class database { public function index() { echo "databse"; } }
Đến đây thì mình sẽ thử thao tác với thằng database này
Code index.php
<?php /* *Lấy value từ URL */ $controllerName = $_GET['controllerName'] ?? 'home'; $action = $_GET['action'] ?? 'index'; /* *Load loadfile.php */ include 'core/loadFile.php'; $database->index();
Mình gọi phương thức index của thằng database xem sao
Kết quả:
Đấy vậy là ngon rồi nó in ra dòng chữ wellcomedatabase
tức là nó đã gọi được controller và cả thằng database rồi.
Vậy là chúng ta đã xây dựng được một cấu trúc khá ngon. Framework nó hoạt động tựa tựa thế này thôi. Mình hi vọng khi đọc bài viết này các bạn sẽ bắt tay vào thực hành luôn. Vì đây là những kiến thức PHP nâng cao , nếu gặp vấn đề gì thì để lại bình luận ở dưới nhé. Ở bài viết tiếp theo chúng ta sẽ xây dựng các class trong core mình sẽ cố gắng hoàn thành các bài hướng dẫn Php nâng cao này một cách nhanh và gọn. Mình xin được kết thúc bài viết tại đây :D.
Xem thêm các bài viết về PHP nâng cao khác tại đây
Để lại một bình luận