MVC PHP

Chúng ta sẽ đặt controller này trong thư mục core của ứng dụng, nghĩa là sẽ đặt trong admin/core.
MVC PHP

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_headerload_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ớp Base_Controller nên tất cả các phương thức trong Base_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.

Related Post

Next
Previous
Click here for Comments

0 nhận xét:



:)
:(
hihi
:-)
:D
=D
:-d
;(
;-(
@-)
:P
:o
:>)
(o)
[-(
:-?
(p)
:-s
(m)
8-)
:-t
:-b
b-(
:-#
=p~
$-)
(y)
(f)
x-)
(k)
(h)
(c)
cheer