MVC PHP NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

MVC PHP - Tìm hiểu file FT_Common.php

Ở bài trước chúng ta đã tìm hiểu được sơ lược cách load controller trong project MVC PHP nhưng đó không phải là cách mà chúng ta sẽ sử dụng, vì vậy trong bài này ta sẽ sửa lại một số phần mà ở bài trước đã làm như sửa file admin.php, thêm file config init.php, xóa phương thức load() trong FT_Controller.php.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trước tiên bạn xem lại cấu trúc folder project của chúng ta.

356/cau-hinh-system-core-mvc.png

Trong sơ đồ này ta có một file FT_Common.php , file này mục đích lưu trữ những hàm load hệ thống và trong bài này ta sẽ tìm hiểu nó.

1. Tạo config cho module

Trước tiên bạn cần tạo một folder config năm trong folder admin. Sau đó tạo một file init.php và dán nội dung sau vào:

Bài viết này được đăng tại [free tuts .net]

 

<?php

return array(
    'default_controller'    => 'index', // controller mặc định
    'default_action'        => 'index', // action mặc định
    '404_controller'        => 'error', // controller lỗi 404
    '404_action'            => 'index'  // action lỗi 404
);

 

Và đây là sơ đồ file:

cau-truc-folder-mvc-php.png

Trong file này mình đã return về một mảng gồm các thông số cấu hình để chạy ứng dụng như thông số controller mặc định và thông số controller lỗi 404 (bài tiếp theo sẽ đề cập tới 404).

Có lẽ bạn sẽ thắc mắc tại sao phần cấu hình nằm trong file system/config/config.php mình đã tạo hai hằng số CONTROLLER_DEFAULT và ACTION_DEFAULT để xử Controller DefaultAction Default rồi mà giờ lại tạo trong file init.php. Đơn giản nếu ta đặt các thông số này trong phần system/config thì  tất cả các module đều có cấu hình chung. Tôi muốn mỗi module có thể tùy chỉnh và thay đổi thông số controller mặc định thì bắt buộc phải đưa nó vào admin/config.

Bây giờ bạn mở file system/config/config.phpxóa đi hai hằng số CONTROLLER_DEFAULT và ACTION_DEFAULT đi nhé vì chúng ta không sử dụng nó.

Sau khi xóa xong ta phải đổi lại file admin.php, lý do là trong file này có sử dụng hai hằng số đó.

 

<?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');

//mở file FT_Common.php, file này chứa hàm FT_Load() chạy hệ thống
include_once PATH_SYSTEM . '/core/FT_Common.php';

// Chương trình chính
FT_load();

 

Ồ, nó hơi ngắn hơn trước phải không nào. Lý do là mình đã import vào file FT_Common.php và gọi đến hàm FT_Load() nằm trong nó. Để hiểu rõ hơn (hàm TF_Load() đâu ra)  thì ta qua phần 2 nhé.

2. Tìm hiểu file FT_Common.php

File FT_Common.php dùng để chứa những hàm sử dụng trong quá trình load hệ thống. Ví dụ như phương thức load() mà ta đã viết trong file FT_Controller.php thì thay vì viết ở đây ta sẽ viết nó nằm trong file FT_Common.php.

Bạn xóa phương thức load() trong FT_Controller đi nhé, lúc này nội dung nó còn như sau:

 

<?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($is_controller = true) 
    {
        
    }
}

 

Tiếp bạn vào file FT_Common.php và dán nội dung sau vào:

 

<?php if ( ! defined('PATH_SYSTEM')) die ('Bad requested!');
/**
 * Hàm chạy ứng dụng
 */
function FT_load()
{
    // Lấy phần config khởi tạo ban đầu
    $config = include_once PATH_APPLICATION . '/config/init.php';

    // Nếu không truyền controller thì lấy controller mặc định
    $controller = empty($_GET['c']) ? $config['default_controller'] : $_GET['c'];

    // Nếu không truyền action thì lấy action mặc định 
    $action = empty($_GET['a']) ? $config['default_action'] : $_GET['a'];

    // 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 ('Không tìm thấy controller');
    }
    
    // Include controller chính để các controller con nó kế thừa
    include_once PATH_SYSTEM . '/core/FT_Controller.php';
    
    // Gọi file controller vào
    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 ('Không tìm thấy controller');
    }

    // 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 ('Không tìm thấy action');
    }
    
    // Chạy ứng dụng
    $controllerObject->{$action}();
}

 

Các bạn thấy nội dung của nó na ná phương thức load() mà ta đã xóa ở FT_Controller đúng không nào. Chỉ có sự khác nhau là:

  • Có lấy nội dung config trong file admin/config/init.php
  • Thay vì gọi đến hai hằng số mà ta đã xóa (CONTROLLER_DEFAULT ACTION_DEFAULT) thì ta sẽ htay nó bằng các giá trị config trong file init.php.
  • Có include file FT_Controller.php để các lớp controller trong admin có thể kế thừa

Ok bây giờ bạn chạy lại URL như bài trước thì kết quả sẽ y chang nhau.

3. Chạy thử ứng dụng

Trước tiên bạn mở controller News_Controller.php lên và sửa lại nội dung như sau:

 

<?php if ( ! defined('PATH_SYSTEM')) die ('Bad requested!');

class News_Controller extends FT_Controller
{
    public function indexAction()
    {
        echo '<pre>';
        print_r($this);
        echo '<h1>Index Action</h1>';
    }
}

 

Sau đó vào URL http://localhost/mvc/admin.php?c=news&a=index thì sẽ xuất hiện hình như sau là mọi chuyện đã xử lý xong:

357/chay-thu-mvc.png

Bạn có thắc mắc tại sao lại như hình không? Lý do mình sử dụng print_r($this) mà lớp này có kế thừa FT_Controller nên nó có chứa các thuộc tính dạng protected.

4. Lời kết

Trong bài này chủ yếu mình sửa một số đoạn code và giải thích cách sử dụng file FT_Common,php để chứa những hàm xử lý riêng của hệ thống.

Trong bài các bạn cần chú ý các vấn đề sau:

  • Có tạo mới file admin/config/init.php
  • Xóa đi phương thức load() trong FT_Controller.php
  • Chỉnh lại file bootstrap admin.php và nó có gọi qua hàm FT_Load() nằm trong file FT_Common.php
  • Thêm hàm FT_Load() vào file FT_Common.php

Chúc các bạn học tốt!

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top