MVC PHP NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

MVC PHP - Viết thư viện load config

Chúng ta lại gặp nhau trong serie project MVC PHP nữa rồi. Trong bài này chúng ta sẽ tìm hiểu cách viết file cấu hình (config) cho module và các thao tác như lấy giá trị config, thiết lập thay đổi giá trị cho config. 

Config là file cấu hình cho module và đóng vai trò rất quan trọng, mỗi module thường sẽ có một file config.php và coder sẽ định nghĩa các thông số nằm trong đó.

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.

1. Tạo file config.php cho module trong MVC

Bạn tạo một file config.php nằm trong thư mục admin/config như sau:

/file-config-cau-hinh-mvc.png

Giả sư ta có danh sách các cấu nằm trong file này như sau:

 

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

return array(
    'csrf_token_name'   => 'tokenname',
    'base_url'          => 'http://localhost/mvc'
);

 

Ok, vấn đề bây giờ là làm sao load các thông số này trong controller. Để làm được như vậy thì ta phải tạo thư viện Loader cho nó.

2. Tạo thư viện load config trong MVC

Bạn tạo một file FT_Config_Loader.php nằm trong thư mục system/core/loader như hình sau:

file-config-cau-hinh-mvc-1.png

Bây giờ bạn copy nội dung sau vào file này:

 

<?php
/**
 * @package		FT_Framework
 * @author		Freetuts Dev Team
 * @email       freetuts.net@gmail.com
 * @copyright	Copyright (c) 2015
 * @since		Version 1.0
 * @filesource  system/core/loader/FT_Config_Loader.php
 */
class FT_Config_Loader
{
    // Danh sách config
    protected $config = array();
    
    /**
	 * Load helper
     * 
	 * @param 	string
     * @desc    hàm load helper, tham số truyền vào là tên của helper
	 */
    public function load($config)
    {
        if (file_exists(PATH_APPLICATION . '/config/' . $config . '.php')){
            $config = include_once PATH_APPLICATION . '/config/' . $config . '.php';
            if ( !empty($config) ){
                foreach ($config as $key => $item){
                    $this->config[$key] = $item;
                }
            }
            return true;
        }
        return FALSE;
    }
    
    /**
	 * Get item config
     * 
	 * @param 	string
     * @param 	string
     * @desc    hàm get config item, tham số truyền vào là tên của item và tham số mặc định
	 */
    public function item($key, $defailt_val = '')
    {
        return isset($this->config[$key]) ? $this->config[$key] : $defailt_val;
    }
    
    /**
	 * Set item config
     * 
	 * @param 	string
     * @param 	string
     * @desc    hàm set config item, tham số truyền vào là tên của item và giá trị của nó
	 */
    public function set_item($key, $val){
        $this->config[$key] = $val;
    }
}

 

Trong lớp này mình định nghĩa ba hàm chính là:

  • hàm load() dùng để load một file config nào đó
  • hàm item() dùng để lấy một key config nào đó 
  • hàm set_item() dùng để thiết lập thay đổi giá trị của key config nào đó.

3. Tạo đối tượng load config trong FT_Controller

Bước cuối cùng này khá quan trọng. Bạn sẽ tạo một đối tượng load config ở hàm khởi tạo của controller chính (FT_Controller).

Bạn mở file system/core/FT_Controller.php lên tìm đến hàm khởi tạo __construct() và thêm một đoạn code sau:

 

public function __construct() 
{
    // Loader cho config
    require_once PATH_SYSTEM . '/core/loader/FT_Config_Loader.php';
    $this->config   = new FT_Config_Loader();
    $this->config->load('config');
}

 

Trong đoạn code này mình thực hiện 3 thao tác:

  • include file loader FT_Config_Loader.php của config
  • khởi tạo mới đối tượng loader và lưu vào thuộc tính config của controller
  • thực hiện load file config.php.

Bạn vào controller New_Controller.php và giữ nguyên nội dung như bài trước đã làm:

 

<?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 đó chạy lên với URL http://localhost/mvc/admin.php?c=news&a=index thì sẽ xuất hiện hình như sau:

file-config-cau-hinh-mvc-2.png

Bạn thấy config đã xuất hiện trong instance của Controller và nó có hai key như trong hình vẽ.

4. Thao tác với thư viện config trong Controller

Bây giờ bạn chỉnh lại controller News_Controller.php với nội dung như sau:

 

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

class News_Controller extends FT_Controller
{
    public function indexAction()
    {
        // Lấy config có key là csrf_token_name
        echo '<h3>Token: csrf_token_name: ' . $this->config->item('csrf_token_name') . '</h3>';
        
        // Thay đổi giá trị cho csrf_token_name
        $this->config->set_item('csrf_token_name', 'new_token');
        echo '<h3>Token: csrf_token_name (changed): ' . $this->config->item('csrf_token_name') . '</h3>';
        
        // Tạo cấu hình mới tên website_name
        $this->config->set_item('website_name', 'freetuts.net');
        echo '<h3>key website_name: ' . $this->config->item('website_name') . '</h3>';
    }
}

 

Chạy controller này lên bạn sẽ thấy giao diện như sau:

file-config-cau-hinh-mvc-3.png

Như vậy là bạn đã biết cách sử dụng thư viện này rồi phải không nào.

5. Lời kết

Phần cấu hình này ngoài file config.php ra bạn có thể tạo thêm một file bất kì và dùng hàm load() để thực hiện lấy nội dung của nó. Đây là một thư viện đóng vai trò cũng khá quan trọng bởi mỗi một module sẽ luôn có những thông số cấu hình riêng và điều này giúp việc quản lý code dễ dàng hơn.

Bạn cần chú ý một số cách sử dụng mà ở phần 4 mình đã thực hiện vì ở các bài sau mình không giải thích thêm về nó nữa. Chú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