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 adminnhé. 
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 */classFT_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     */    publicfunction__construct()     {    }        /**     * Hàm chạy ứng dụng     *      * @desc    tham số truyền vào gồm controller và action     */    publicfunctionload($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_SYSTEMchỉ 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ố databasedefine('DB_HOST',       'localhost');define('DB_USER',       'root');define('DB_PASSWORD',   '');// Thông số controller và action mặc địnhdefine('CONTROLLER_DEFAULT', 'index');define('ACTION_DEFAULT', 'index'); | 
Trong đó có hai loại:
- Hằng số cấu hình database1234// Thông số databasedefine('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 địnhdefine('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.phpvà 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ố cvà 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_DEFAULTvàACTION_DEFAULTtrong filesystem/config/config.phpmà 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ốngdefine('PATH_SYSTEM', __DIR__ .'/system');define('PATH_APPLICATION', __DIR__ . '/admin');// Lấy thông số cấu hìnhrequire(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 controllerrequire_oncePATH_SYSTEM . '/core/FT_Controller.php';// Chạy controller$controller= newFT_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 đóControllernamelà 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 | publicfunctionload($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_oncePATH_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!');classNews_Controller {    publicfunctionindexAction()    {        echo'<h1>Index Action</h1>';    }        publicfunctiondetailAction()    {        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: (code.freetuts.net)
 



0 nhận xét: