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 library

Ở bài trước chúng ta đã viết được thư viện load config và trong bài này chúng ta cũng viết một thư viện có chức năng tương tự đó là load library. Vậy library có gì đặc biệt trong mô hình MVC mà ta phải cần đến nó? Để trả lời câu hỏi này thì ta sẽ đi tìm hiểu khái niệm library là gì đã nhé.

Trước khi vào vấn đề chính thì mình chụp hình cấu trúc folder của project khi kết thúc bài này để các bạn dễ học hơn nhé.

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.

load-thu-vien-trong-mvc-1.png

1. Library trong mô hình MVC

Trong quá trình xây dựng dự án đôi lúc bạn cần viết những class nhằm xử lý một vấn đề nào đó. Ví dụ như class upload file, class phân trang, ... thì những lớp này sẽ được đặt ở đâu trong mô hình MVC? Câu trả lời chính là đặt trong thư mục library nhé các bạn. Còn thư mục config chỉ chứa những file cấu hình hệ thống và nội dung của nó sẽ return về một mảng dạng tương tự như bài trước chúng ta đã học rồi.

Cấu trúc lưu trữ này giống với Framework Codeigniter và mình cũng xây dựng dạng như nó nhưng ở mức đơn giản để dễ trình bàydễ cả vấn đề hiểu bài của các bạn.

2. Thư mục library nằm ở đâu trong mô hình MVC

Tất cả các class thư viện đều được đặt trong thư mục system/library. Vậy bạn có thắc mắc tại sao không đặt ở trong module admin không? Đó là tại vì tôi muốn các thư viện có thể dùng chung cho tất cả module (admin, site) nên sẽ đặt trong system. Còn nếu đặt trong module thì chỉ dùng được cho module đó thôi.

Bây giờ bạn tạo một file tên là Upload_Library.php nằm trong thư mục system/library và copy nội dung sau dán vào:

 

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

class Upload_Library 
{
    public function __construct()
    {
        echo '<h3>Class Upload_Library được khởi tạo</h3>';
    }
    
    public function upload()
    {
        echo '<h3>Method Upload được gọi tới</h3>';
    }
}

 

Vấn đề bây giờ của chúng ta là viết thư viện load library.

3. Viết thư viện load library

Bạn mở file system/core/loader/FT_Library_Loader.php  và copy nội dung sau vào:

 

<?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/loader/FT_Library_Loader.php
 */
class FT_Library_Loader
{
    /**
	 * Load library
     * 
	 * @param 	string
     * @param 	array
     * @desc    hàm load library, tham số truyền vào là tên của library và 
     *          danh sách các biến trong hàm khởi tạo (nếu có)
	 */
    public function load($library, $agrs = array())
    {
        // Nếu thư viện chưa được load thì thực hiện load
        if ( empty($this->{$library}) )
        {
            // Chuyển chữ hoa đầu và thêm hậu tố _Library
            $class = ucfirst($library) . '_Library';
            require_once(PATH_SYSTEM . '/library/' . $class . '.php');
            $this->{$library} = new $class($agrs);
        }
    }
}

 

Trong đó mình đã tạo một class tên là FT_Library_Loader và có một method load() gôm hai tham số:

  • $library là tên class muốn load.
  • $agrs là các tham số truyền vào hàm khởi tạo của class đó. Nếu không có thì bỏ qua tham số này

Các bạn chú ý tên class truyền vào phải tuân theo nguyên tắc như sau: Giả sử class bạn đặt tên là upload thì tên file phải là Upload_Library.php (viết hoa chữ đầu và thêm hậu tố _Library), tương tự tên class cũng phải đặt như vậy. Nếu bạn để ý kĩ trong phương thức load() mình cũng có đề cập đến vấn đề này.

4. Bổ sung thư viện vào FT_Controller

Chúng ta cần khởi tạo thư viện FT_Library_Loader này ở controller chính (FT_Controller) nhằm mục đích các controller trong module admin có thể sử dụng được.

Bạn mở file system/core/FT_Controller.php lên và sửa lại hàm khởi tạo như 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');

    // Loader Library
    require_once PATH_SYSTEM . '/core/loader/FT_Library_Loader.php';
    $this->library = new FT_Library_Loader();
}

 

Ok và cuối cùng chúng ta chỉ học cách sử dụng thôi.

4. Load libray tại Controller

Bây giờ bạn tạo mới một controller tên là library bằng cách thực hiện các bước sau:

  • Tạo file Library_Controller.php nằm trong thư mục admin/controller
  • Viết code tạo mới Controller và Action index.
    <?php if ( ! defined('PATH_SYSTEM')) die ('Bad requested!');
    
    class Library_Controller extends FT_Controller
    {
        public function indexAction()
        {
            
        }
    }

Như vậy là bạn tạo xong rồi đấy. Ở những bài sau mình không nhắc lại cách tạo controller nữa nhé.

Bây giờ bạn viết code load library uploadgọi đến phương thức upload bằng cách sửa lại controller như sau:

 

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

class Library_Controller extends FT_Controller
{
    public function indexAction()
    {
        // Tạo mới thư viện
        $this->library->load('upload');
        
        // Gọi đến phương thức upload
        $this->library->upload->upload();
    }
}

 

Chạy lên với URL http://localhost/mvc/admin.php?c=library nếu xuất hiện giao diện như sau là OK.

load-thu-vien-trong-mvc.png

5. Lời kết

Vậy là trong bài này bạn đã tìm hiểu được cách viết hệ thống load library và ý nghĩa của folder library trong mô hình MVC. Bài này cũng rất thú vụ không kém gì bài load config phải không nào. Nếu có vấn đề thắc mắc bạn hãy comment bên dưới mình sẽ giải đáp sớm nhất có thể.

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