MVC PHP - Viết thư viện load helper
Tiếp tục serie MVC PHP thì trong bài này chúng ta tìm hiểu helper và cách viết thư viện load helper trong project MVC của chúng ta. Về cách làm thì vẫn không khác gì so với các bài load Library và config nên có lẽ mình sẽ giải thích ít hơn nhé các bạn.
Trước khi vào bài học thì mình chụp hình cấu trúc folder cho bài này nhé.
1. Helper là gì?
Helper là nơi lưu trữ các hàm và mỗi file helper thông thường sẽ chứa những hàm có cùng một chủ đề. Ví dụ khi ta tạo các hàm xử lý chuỗi thì ta sẽ tạo một file String_Helper.php
để lưu trữ, khi tạo các hàm chuyên xử lý file thì ta tạo file File_Helper.php
để lưu trữ.
Helper trong Project MVC này đặt ở đâu?
Tất cả các file helper sẽ được đặt trong folder system/helper
và mục đích là cho tất cả các module đều có thể sử dụng nó.
Bài viết này được đăng tại [free tuts .net]
Quy tắc đặt tên file helper
Để đặt tên file helper bạn phải tuân thủ các quy tắc sau:
- Tên file helper phải viết in hoa chữ cái đầu và có hậu tố
_Helper
ở cuối. Ví dụ helperstring
thì tên file sẽ làString_Helper.php
- Trong helper bạn có thể chứa
class
hoặcfunction
đều được. Nhưng theo nguyên tắc nếu làclass
thì bạn nên đặt nó trong library nhé. - Vì
helper
chỉ là nhữngfunction
nên khiload helper
hệ thống sẽ không tạo mới nhưlibrary
mà bạn muốn dùng hàm nào thì gọi tới hàm đó.
2. Tạo mới một file helper
Bây giờ ta thực hành tạo mới một file helper
có tên là string
thì bạn sẽ thực hiện các bước sau:
- Tạo mới một file có tên là
String_Helper.php
nằm trong thư mụcsystem/helper
- Viết những hàm bạn muốn tạo trong helper đó. Giả sử mình viết hàm
string_to_int()
như sau:<?php if ( ! defined('PATH_SYSTEM')) die ('Bad requested!'); // Chuyển đổi chữ thành số function string_to_int($str) { return sprintf("%u", crc32($str)); }
Ok vậy là bạn đã tạo được một file helper có tên là string
. Bây giờ ta tiến hành viết thư viện loader cho helper
3. Viết thư viện loader cho helper
Bạn mở file system/core/loader/FT_Helper_Loader.php
lên và điền nội dung sau vào:
<?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_Helper_Loader.php */ class FT_Helper_Loader { /** * Load helper * * @param string * @desc hàm load helper, tham số truyền vào là tên của helper */ public function load($helper) { $helper = ucfirst($helper) . '_Helper'; require_once(PATH_SYSTEM . '/helper/' . $helper . '.php'); } }
Trong file này mình tạo mới một class tên là FT_Helper_Loader
và trong nó có phương thức load()
, phương thức này có tham số truyền vào là tên helper
ở dạng chưa được chuyển đổi nên khi bạn load helper chỉ cần nhập vào tên là được. Ví dụ load helper
string thì sẽ nhập tên là string
chứ không phải String_Helper
.
4. Khởi tạo thư viện load helper trong FT_Controller
Bước này khá quan trọng nhé các bạn. bạn vào file system/core/FT_Controller.php
và thêm đoạn code load helper
như sau ở hàm khởi tạo:
// Load Helper require_once PATH_SYSTEM . '/core/loader/FT_Helper_Loader.php'; $this->helper = new FT_Helper_Loader();
Và đây là toàn bộ code cho hàm khởi tạo:
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(); // Load Helper require_once PATH_SYSTEM . '/core/loader/FT_Helper_Loader.php'; $this->helper = new FT_Helper_Loader(); }
5. Sử dụng helper tại controller ở module
Bây giờ ta sẽ thực hành sử dụng helper nhé.
Bạn tạo một controller mới tên là Helper_Controller.php
, sau đó copy nội dung sau vào:
<?php if ( ! defined('PATH_SYSTEM')) die ('Bad requested!'); class Helper_Controller extends FT_Controller { public function indexAction() { // Load heloer $this->helper->load('string'); // Gọi đến hàm string_to_int echo string_to_int('freetuts.net'); } }
Bạn chạy với URL như sau: http://localhost/mvc/admin.php?c=helper và nếu kết quả như hình thì bạn đã thành công rồi đấy.
6. Lời kết
Khi viết các bài về load thư viện này nếu bạn không rành về lập trình hướng đối tượng hoặc chưa tìm hiểu một số kiến thức về design pattern thì sẽ hơi khó khăn cho bạn đấy. Lời khuyên cho ban nếu rơi vào trường hợp đó thì hãy ráng học OOP trước khi tìm hiểu vào project này nhé, vì đây là serie dạng text chứ không phải video.