Bạn tạo một file tên là
Base_Controller.php
nằm trong thư muc admin/core
, sau đó copy 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
| <?php if ( ! defined( 'PATH_SYSTEM' )) die ( 'Bad requested!' ); class Base_Controller extends FT_Controller { public function __construct() { parent::__construct(); } public function load_header() { // Load nội dung footer } public function load_footer() { // Load nội dung header } // Hàm hủy này có nhiệm vụ show nội dung của view, lúc này các controller // không cần gọi đến $this->view->show nữa public function __destruct() { $this ->view->show(); } } |
Ở
Base_Controller
mình tạo các hàm load_header
, load_footer
và đặc biệt là ở hàm hủy mình có gọi đến phương thúc$this->view->show()
và đây chính là phương thức hiển thị view ra trình duyệt mà ta đã sử dụng rất nhiều lần rồi. Riêng ở hàm khởi tạo __construct() bắt buộc bạn phải gọi tới hàm khởi tạo của lớp cha nhé (parent::__construct()
).
Nhiệm vụ bây giờ của chúng ta là làm thế nào để sử dụng được
Base_Controller
? 2. Load Base_Controller trong hàm FT_Load()
Quay lại file
FT_Common.php
nằm trong thư mục system/core
. Bạn mở file này lên và tìm đến hàm FT_Load()
sau đó tìm đến dòng 28 có đoạn code load FT_Controller
như sau:
1
| include_once PATH_SYSTEM . '/core/FT_Controller.php' ; |
Bây giờ ta bổ sung thêm một đoạn code bên dưới dòng đó nhé.
1
2
3
4
5
6
7
| // Include controller chính để các controller con nó kế thừa include_once PATH_SYSTEM . '/core/FT_Controller.php' ; // Load Base_Controller if ( file_exists (PATH_APPLICATION . '/core/Base_Controller.php' )){ include_once PATH_APPLICATION . '/core/Base_Controller.php' ; } |
Ok mọi chuyện vậy là xong rồi. Nhưng có một lưu ý là sau khi bổ sung thư viện này thì ở các controller bạn không phải kế thừ
FT_Controller
nữa mà sẽ kế thừa Base_Controller
nhé.
Ví dụ:
1
2
3
4
5
6
7
| class Layout_Controller extends Base_Controller { public function indexAction() { } } |
3. Ví dụ sử dụng Base_Controller
Bạn tạo một controller tên là
Product_Controller
và copy nội dung sau vào:
1
2
3
4
5
6
7
8
9
| <?php if ( ! defined( 'PATH_SYSTEM' )) die ( 'Bad requested!' ); class Product_Controller extends Base_Controller { public function indexAction() { $this ->view->load( 'product' ); } } |
Tiếp theo bạn tạo một view tên là
product.php
và copy nội dung sau vào:
1
2
3
4
5
6
7
8
9
10
| <!DOCTYPE html> < html > < head > < title ></ title > < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > </ head > < body > < h1 >Đây là trang sản phẩm</ h1 > </ body > </ html > |
Bây giờ bạn ra trình duyệt nhập URL là http://localhost/mvc/admin.php?c=product thì sẽ xuất hiện dòng chữ như sau tức là controller đã chạy đúng:
Bạn cần chú ý những vấn đề sau:
- Trong
Product_Controller
mình đã kế thừa lớpBase_Controller
nên tất cả các phương thức trongBase_Controller
đều có thể sử dụng được nhé. - Trong action index mình không cần gọi tới phương thức
$this->view->show()
nữa bởi vì ởBase_Controller
ta đã gọi tới nó ở hàm hủy__destruct()
.
Và sau đây là cấu trúc folder cho tới bài hôm nay.
0 nhận xét: