HANDSOMEROOT
Bài 03: MVC PHP - Xây dựng file Bootstrap và Controller chính
- Nhận đường liên kết
- X
- Ứng dụng khác
Bài này khá đơn giản vì bạn chỉ cần tạo các folder trong hệ thống xử lý của CORE và viết code cho file bootstrap, file Controller chính trong mô hình MVC. Tuy nói là đơn giản nhưng bạn cũng phải hiểu ý nghĩa của từng file để qua bài sau ta tiến hành code sẽ dễ dàng hơn.
Trước khi vào vấn đề chính mình xin nhắc lại một chút, vì mình chỉ hướng dẫn xây dựng một module quản lý tin tức MVC nên rất đơn giản và không code cho frontend nên bạn hãy xóa đi folder
site
và file index.php
nhé.1. Xây dựng cấu trúc folder System trong MVC
Note: Nếu bạn chưa xem bài trước thì quay lại để xem cấu trúc folder MVC.
Trong phần này ta chỉ quan tâm đến các file và folder bên trong
system
nên mình sẽ không show các folder trong admin
nhé.
Các bạn xem hình dưới đây:
Các bạn thấy folder
system
mình đã bổ sung một số file và folder như trong hình và có giải thích ý nghĩa của nó nên mình không giải thích gì thêm. Và mình có xóa đi folder site
và file index.php
ngoài cùng rồi nhé.2. Xây dựng lớp Controller chính
Lớp controller chính nằm trong file
system/core/FT_Controller.php
. Bạn mở file này lên và thêm vào nội dung 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| <?php if ( ! defined( 'PATH_SYSTEM' )) die ( 'Bad requested!' ); /** * @package FT_Framework * @author Freetuts Dev Team * @email freetuts.net@gmail.com * @copyright Copyright (c) 2015 * @since Version 1.0 * @filesource system/core/FT_Controller.php */ class FT_Controller { // Đối tượng view protected $view = NULL; // Đối tượng model protected $model = NULL; // Đối tượng library protected $library = NULL; // Đối tượng helper protected $helper = NULL; // Đối tượng config protected $config = NULL; /** * Hàm khởi tạo * * @desc Load các thư viện cần thiết */ public function __construct() { } /** * Hàm chạy ứng dụng * * @desc tham số truyền vào gồm controller và action */ public function load( $controller , $action ) { } } |
Trong đó bạn cần chú ý đến những vấn đề sau:
- Phía trên cùng mình có sử dụng một đoạn kiểm tra một hằng số tồn tại không và nếu không tồn tại thì thoát khỏi chương trình. Đoạn code này giúp bảo vệ an toàn cho hệ thống vì hằng số
PATH_SYSTEM
chỉ tồn tại khi ban gọi thông qua file bootstrap. - Tại hàm
load()
có hai tham số truyền vào là controller và action. Đây cũng chính là hàm sẽ chạy ứng dụng
3. Tạo các hằng số cấu hình trong config
Bạn mở file
system/config/config.php
lên và điền nội dung sau vào:
1
2
3
4
5
6
7
8
9
| <?php // Thông số database define( 'DB_HOST' , 'localhost' ); define( 'DB_USER' , 'root' ); define( 'DB_PASSWORD' , '' ); // Thông số controller và action mặc định define( 'CONTROLLER_DEFAULT' , 'index' ); define( 'ACTION_DEFAULT' , 'index' ); |
Trong đó có hai loại:
- Hằng số cấu hình database1234
// Thông số database
define(
'DB_HOST'
,
'localhost'
);
define(
'DB_USER'
,
'root'
);
define(
'DB_PASSWORD'
,
''
);
- Hằng số xác định controller mặc định và action mặc định123
// Thông số controller và action mặc định
define(
'CONTROLLER_DEFAULT'
,
'index'
);
define(
'ACTION_DEFAULT'
,
'index'
);
4. Viết code cho file bootstrap
Bây giờ ta sẽ tiến hành viết code cho file bootstrap
admin.php
ở ngoài cùng của project mvc
.
Trước khi vào vấn đề chính thì mình có một số lưu ý như sau:
- Tất cả các request sẽ vào file
admin.php
và file này nó sẽ dựa vào URL để gọi tới controller và action tương ứng - URL của chúng ta có dạng domain.com/admin.php?c={controller}&a={action}, có nghĩa khi người dùng gọi controller nào thì sẽ truyền cho tham số
c
và gọi action nào thì truyền vào tham sốa
. - Nếu người dùng không gọi controller hoặc action nào thì sẽ lấy các giá trị
CONTROLLER_DEFAULT
vàACTION_DEFAULT
trong filesystem/config/config.php
mà ta đã tạo ở phần 3.
Bây giờ bạn nhập nội dung sau vào file
admin.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
27
28
29
| <?php // Đường dẫn tới hệ thống define( 'PATH_SYSTEM' , __DIR__ . '/system' ); define( 'PATH_APPLICATION' , __DIR__ . '/admin' ); // Lấy thông số cấu hình require (PATH_SYSTEM . '/config/config.php' ); // Danh sách tham số gồm hai phần // - controller: controller hiện tại // - action: action hiện tại $segments = array ( 'controller' => '' , 'action' => array () ); // Nếu không truyền controller thì lấy controller mặc định $segments [ 'controller' ] = empty ( $_GET [ 'c' ]) ? CONTROLLER_DEFAULT : $_GET [ 'c' ]; // Nếu không truyền action thì lấy action mặc định $segments [ 'action' ] = empty ( $_GET [ 'a' ]) ? ACTION_DEFAULT : $_GET [ 'a' ]; // Require controller require_once PATH_SYSTEM . '/core/FT_Controller.php' ; // Chạy controller $controller = new FT_Controller(); $controller ->load( $segments [ 'controller' ], $segments [ 'action' ]); |
Các phần comment mình đã giải thích quá kỹ rồi. Bạn chỉ lưu ý thêm các vấn đề sau:
- require file
syste/core/config.php
để lấy các hằng số - require file
system/core/FT_Controller.php
để tạo lớpFT_controller
, đây là controller chính - gọi tới hàm
load()
trong controller chính
5. Viết code cho hàm load trong file FT_Controller.php
Trước khi vào vấn đề thì mình đưa ra quy luật của controller như sau.
- Tất cả các controller của ứng dụng (ứng dụng ở đây chính là folder
admin
) đề nằm trong folderadmin/controller
- Tên của controller phải ở dạng
Controllername_Controller.php
. Trong đóControllername
là tên mà bạn muốn đặt cho controller - Class của controller cũng phải giống tên file của nó, nghĩa là sẽ có tên
Controllername_Controller
Các bạn xem hình tham khảo:
Bây giờ bạn mở file
system/core/FT_Controller.php
lên, tìm tới hàm load()
và gõ nội dung sau vào:
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
30
31
| public function load( $controller , $action ) { // Chuyển đổi tên controller vì nó có định dạng là {Name}_Controller $controller = ucfirst( strtolower ( $controller )) . '_Controller' ; // chuyển đổi tên action vì nó có định dạng {name}Action $action = strtolower ( $action ) . 'Action' ; // Kiểm tra file controller có tồn tại hay không if (! file_exists (PATH_APPLICATION . '/controller/' . $controller . '.php' )){ die ( 'Controller không tồn tại' ); } require_once PATH_APPLICATION . '/controller/' . $controller . '.php' ; // Kiểm tra class controller có tồn tại hay không if (! class_exists ( $controller )){ die ( 'Controller không tồn tại' ); } // Khởi tạo controller $controllerObject = new $controller (); // Kiểm tra action có tồn tại hay không if ( !method_exists( $controllerObject , $action )){ die ( 'Action không tồn tại' ); } // Gọi tới action $controllerObject ->{ $action }(); } |
Bạn chú ý trong code mình có dùng một số hàm chuyển đổi chuỗi như ucfirst, strtolower để đổi tên controller theo quy luật mà mình nói ở trên.
6. Tạo mới một controller và test
Bây giờ bạn cần tạo một file
News_Controller.php
nằm trong folder admin/controller
nhé, sau đó copy nội dung sau vào:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <?php if ( ! defined( 'PATH_SYSTEM' )) die ( 'Bad requested!' ); class News_Controller { public function indexAction() { echo '<h1>Index Action</h1>' ; } public function detailAction() { echo '<h1>Detail Action</h1>' ; } } |
Bạn ra trình duyệt gõ URL là localhost/mvc/admin.php?c=news&a=detail và nếu xuất hiện chữ Detail Action tức là bạn đã thành công rồi đấy.
Nếu vẫn còn nghi ngờ thì bạn gõ vào URL là localhost/mvc/admin.php?c=news thì nó sẽ xuất hiện chữ Index Action , bởi vì ta không truyền action vào URL nên mặc định nó gọi indexAction.
Và đây là toàn bộ các file tính đến thời điểm hiện tại trong project mvc của chúng ta
7 Lời kết
Trong bài này chúng ta đã tạo được file bootstrap và controller chính, ở các bài tiếp theo chúng ta sẽ tiến hành viết những thư viện loader để thực hiện load model, library nhé. Nếu có gì thắc mắc bạn có thể comment bên dưới và mình sẽ giải thích cho các bạn.
Nguồn: http://freetuts.net/mvc-php-xay-dung-file-bootstrap-va-controller-chinh-356.html
Bài đăng phổ biến từ blog này
[Share] CSDL Quản lý Shop Online
Cấu trúc của cơ sở dữ liệu Danh sách các bảng 1. Bảng About (Lưu các bài viết giới thiệu cửa hàng) 2. Bảng Contact (Lưu thông tin liên hệ của cửa hàng) 3. Bảng Feedback (Lưu trữ thông tin phản hồi của người dùng) 4. Bảng Footer (Lưu trữ những thiết kế footer của trang web) 5. Bảng MenuType (Lưu trữ các loại menu trong trang web. Ví dụ : TopMenu, LeftMenu…) 6. Bảng Menu (Lưu trữ các menu) 7. Bảng NewCategory (Lưu trữ các nhóm chuyên mục về tin tức. Ví dụ : Tin khuyến mãi, tin công nghệ,…) 8. Bảng New (Lưu trữ các tin tức, bài đăng trên website) 9. Bảng Tag (Lưu trữ các thẻ) 10. Bảng ...
Hướng dẫn cài đặt VRML Pad và Cortona 3D Viewer
1. Hướng dẫn cài đặt VrmlPad 3.0 Chào các bạn. Hôm nay mình sẽ hướng dẫn các bạn cài đặt VrmlPad 3.0 Đầu tiên các bạn truy cập vào link sau để download phần mềm http://www.parallelgraphics.com/products/vrmlpad/download/ Ở phần VrmlPad 3.0 > Evalustion version chọn Download Sau khi quá trình tải về hoàn tất Các bạn tiến hành cài đặt phần mềm Chọn Next Nhấn Browser để chọn đường dẫn cài đặt phần mềm, chọn Next Chọn Install Chờ quá trình cài đặt phần mềm thành công. Nhấn Finish OK. Mình đã cài đặt xong. Giao diện phần mềm khi chạy lần đầu tiên Các bạn đã có thể soạn thảo Nhưng để chạy được file .wrl này chúng ta sẽ cài thêm 1 phần mềm bổ trợ Cortona 3D 2. Hướng dẫn cài đặt Cortona 3D Viewer Các bạn vào link sau để download http://www.cortona3d.com/ Chọn Menu " PRODUCTS " > " VIEWERS " > " CORTONA 3D VIEWER " Tiếp theo chọn DOWNLOAD CORTONA 3D VIEWER Chọn download tùy vào...
RANKING in SQL (ROW_NUMBER, RANK, DENSE_RANK,NTILE)
Hàm Ranking là gì? Các hàm Ranking cho phép bạn có thể đánh số liên tục (xếp loại) cho các tập hợp kết quả. Các hàm này có thể được sử dụng để cung cấp số thứ tự trong hệ thống đánh số tuần tự khác nhau. Có thể hiểu đơn giản như sau: bạn có từng con số nằm trên từng dòng liên tục, tại dòng thứ nhất xếp loại số 1, dòng thứ 2 xếp loại số là 2… Bạn có thể sử dụng hàm ranking theo các nhóm số tuần tự, mỗi một nhóm sẽ được đánh số theo lược đồ 1,2,3 và nhóm tiếp theo lại bắt đầu bằng 1,2,3… Chúng ta bắt đầu xem xét cách hàm trong sql hổ trợ từ 2005 Dữ liệu thử : CREATE TABLE Person( FirstName VARCHAR(10), Age INT, Gender CHAR(1) ) INSERT INTO Person VALUES ('Ted', 23, 'M') INSERT INTO Person VALUES ('John', 40, 'M') INSERT INTO Person VALUES ('George', 6, 'M') INSERT INTO Person VALUES ('Mary', 11, 'F') INSERT INTO Person VALUES ('Sam', 17, 'M') INSERT INTO Pe...
Nhận xét
Đăng nhận xét