HANDSOMEROOT
Bài 09: MVC PHP - Viết Base_Controller
- Nhận đường liên kết
- X
- Ứng dụng khác
Chúng ta đã học được cách load view rồi, tuy nhiên nếu sử dụng cấu trúc như vậy thì dự án sẽ khó quản lý code và nội dung sẽ bị trùng lặp. Ví dụ giao diện website của bạn gồm có 3 phần là header, footer và content. Đối với header và footer sẽ là nội dung mà trang nào cũng có nên mình muốn chi viết cho nó đúng một lần duy nhất, và muốn làm được như vậy mình sẽ tạo một controller đặc biệt tên là
Base_Controller
.1. Vị trí đặt Base_Controller
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
.
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.
4. Lời kết
Bài này có vẻ hơi ngắn nhưng mình vẫn quyết định tạo một bài riêng bởi vì như vậy các bạn sẽ dễ dàng học và dễ dàng tìm kiếm lại. Nếu bạn cảm thấy mình phân chia kiểu này sẽ khó học thì có thể góp ý và mình sẽ ghi nhận các ý kiến đó và bổ sung cho các serie sau này.
Trong bài này bạn cần hiểu ý nghĩa của
Base_Controller
như thế nào thì ở bài tiếp theo tìm hiểu kỹ thuật master layout trong MVC bạn mới có thể tiếp thu nhanh được. Chính vì vậy bạn đừng bỏ qua những đoạn code và giải thích của mình nhé.
Nguồn: http://freetuts.net/mvc-php-viet-base-controller-363.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