CODEIGNITER TUTORIALS
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Hướng dẫn custom bộ core codeigniter

Có khi nào bạn đặt câu hỏi có nên sửa các file nằm trong bộ core của codeigniter? Tôi sẽ trả lời cho bạn là không nên sửa các file nằm trong hệ thống core, library của codeigniter vì nếu làm như vậy sau này CI nâng cấp lên phiên bản mới thì coi như bộ source của bạn khó có thể nâng cấp theo. Vậy có cách nào ta có thể can thiệp vào? câu trả lời là CI cung cấp cho ta một chức năng dùng để overwrite các hàm trong core một cách dễ quản lý nhất, đó chính là thư mục core trong application.

Bài này chỉ mang tính chất giải thích cho bạn biết cách viết Overwrite lại bộ core codeigniter chứ không hướng dẫn một chức năng cụ thể nào, bạn hay xem như bài này bổ trợ kiến thức Codeigniter cho bạn.

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.

Ghi đè các hàm trong lớp CI_Loader

Trước tiên tôi muốn bạn mở fiel system/core/loader.php và tìm hểu trong file này có những gì. Trong này có một lớp CI_Loader và có tất cả những hàm mà bạn sử dụng ở controller. Ví dụ như với đoạn code $this->load->view() thì tương ứng trong lớp CI_Loader có hàm function view(), tương tự cho các hàm load model, load language, ....

Đôi lúc các bạn muốn ghi đè lên một số function như function load view, load model, load language nhưng bạn không biết làm như thế nào, giải pháp cho bạn là bạn tạo một file với tên MY_Loader đặt trong thư mục core của application như hình bên dưới.

Sau đó bạn copy nội dung sau vào file MY_Loader

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Loader extends CI_Loader 
{
    function __construct() {
        parent::__construct();
    }
    
    function view($view, $vars = array(), $return = FALSE){
        die ('BAN DANG LOAD VIEW '.$view);
    }
    
}
?>

Sau đó bạn tạo một controller với tên là welcome.php, và copy nội dung này vào

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {
	public function index()
	{
		$this->load->view('welcome_message');
	}
}
?>

Sau đó bạn chạy controller lên trên màn hình sẽ xuất hiện dòng chữ "BAN DANG LOAD VIEW welcome_message", như vậy là hàm view trong lớp MY_Widget đã overwrite lại hàm view trong lớp CI_Loader nên khi ta gọi $this->load->view() nó sẽ gọi đến hàm view trong lớp MY_Widget.

Như vậy ta có kết luận như sau: Khi ta tạo bất kì một lớp nào nằm trong thư mục core của application mà có phần đuôi sau (tức là phần bỏ đi chữ MY_) trùng với phần đuôi sau của một nào đó nằm trong thư mục core của System (bỏ đi chữ CI_) thì hệ thống sẽ tự động require file đó và coi nó như là file core của CI thay vì file gốc.

Nếu file MY_{name} không kế thừa (extends) lớp CI_{name} thì hệ thông cũng không báo sai, nhưng lúc này nếu ta sử dụng một hàm nào đó trong lớp CI_{name} thì sẽ bị báo lỗi, như đoạn code bên trên tôi đã extends lớp CI_Loader nên đó là đoạn code đúng.

Ghi đè lên các lớp CORE khác

Với các hàm khá thì tương tự như ví dụ trên, các bạn chỉ cần tạo tên file có chữ MY_ với tên file bạn muốn overwrite, ví dụ MY_View, MY_Model, MY_Controller, ....

Bạn có thắc mắc chữ MY_ đâu ra không? nó nằm trong file appliation/config/config.php, các bạn tìm đến dòng 109 $config['subclass_prefix'] = 'MY_';. Nếu bạn không muốn chữ MY thì có thể đặt một tên bất kì, ví dụ $config['subclass_prefix'] = 'FTUTS_' thì những file bạn muốn overwrite phải đặt lại tên là FTUTS_Loader, FTUTS_Model. FTUTS_View, ....

Lời Kết

Qua bài trên các bạn đã biết được chức năng của thư mục core rồi đúng không nào, các bạn phải hiểu rằng muốn nắm được bộ source codeigniter thì ta phải nắm được quy trình hoạt động, các instance và có thể custom bộ core của codeigniter... Vì thế mình mới tạo topic này với hy vọng giải đáp được thắc mắc của một số bạn, và cũng từ bài này tôi có thể viết các bài nâng cao hơn.

Cùng chuyên mục:

Chia sẻ theme web blog mobile đơn giản (Theme FMB1)

Chia sẻ theme web blog mobile đơn giản (Theme FMB1)

Freetuts Mobile Blog được code trên nền tảng PHP và MySQL, sử dụng Codeigniter Framework.

Bài 19: Rewrite URL trong Codeigniter

Bài 19: Rewrite URL trong Codeigniter

Sau một khoảng thời gian không đụng tới Codeigniter thì hôm nay lại có dịp…

Tìm hiểu quy trình load model trong codeigniter

Tìm hiểu quy trình load model trong codeigniter

Việc load model rất quen thuộc với những bạn sử dụng framwork codeigniter nhưng đôi…

Tự tạo thư viện load widget trong codeigniter

Tự tạo thư viện load widget trong codeigniter

Như các bạn biết mặc định hệ thống của Codeigniter hoạt động theo mô hình…

Bài 18: Tìm Hiểu Library Shopping Cart trong Codeigniter

Bài 18: Tìm Hiểu Library Shopping Cart trong Codeigniter

Chào mừng các bạn đã quay trở lại freetuts.net. Như vậy ở bài trước chúng…

Bài 17: Xây dựng crud add - update - edit user

Bài 17: Xây dựng crud add - update - edit user

Crud là một thuật ngữ không hề xa lạ với dân lập trình, nó là…

Bài 16: Kỹ thuật master layout trong codeigniter

Bài 16: Kỹ thuật master layout trong codeigniter

Đây là một vấn đề mở rộng mà CI không đề cập trong user guide,…

Bài 15: Tìm Hiểu Helper Language Trong Codeigniter

Bài 15: Tìm Hiểu Helper Language Trong Codeigniter

Trong bài viết này , chúng ta chỉ tìm hiểu ở khái niệm cơ bản…

Bài 14: Tìm Hiểu Helper Text Trong Codeigniter

Bài 14: Tìm Hiểu Helper Text Trong Codeigniter

Nhìn tiêu đề, hẳn các bạn đã đoán ra hôm nay chúng ta sẽ tìm…

Bài 13: Tìm Hiểu Helper Date Trong Codeigniter

Bài 13: Tìm Hiểu Helper Date Trong Codeigniter

Hôm nay chúng ta sẽ tiếp tục tìm hiểu sâu hơn về các helper mà…

Bài 12: Đóng dấu watermark image trong codeigniter

Bài 12: Đóng dấu watermark image trong codeigniter

Đầu tiên xin gửi lời cảm ơn các bạn đã quan tâm và theo dõi…

Bài 11: Tìm Hiểu Library Image Trong Codeigniter

Bài 11: Tìm Hiểu Library Image Trong Codeigniter

Kết thúc bài trước, chúng ta đã hoàn thành khá xuất sắc phần upload hình…

Bài 10: Tìm hiểu library upload trong codeigniter

Bài 10: Tìm hiểu library upload trong codeigniter

Chào mừng các bạn đã quay trở lại freetuts.net, đã lâu rồi tôi không viết…

Bài 9: Tìm Hiểu Library Form Validation

Bài 9: Tìm Hiểu Library Form Validation

Cho tới bài viết này, chắc hẵn các bạn đều đã biết rõ cách load…

Bài 8: Tìm hiểu Helper Url Và Form Trong Codeigniter

Bài 8: Tìm hiểu Helper Url Và Form Trong Codeigniter

Trong Codeigniter Framework nó chia ra 2 khái niệm đó là helper & library, vậy…

Bài 7: Load Library Pagination Trong Codeigniter

Bài 7: Load Library Pagination Trong Codeigniter

Đây là một library cũng khá là phổ biến, hay được sử dụng trong quá…

Bài 6: Load Library Database Trong Codeigniter

Bài 6: Load Library Database Trong Codeigniter

Tôi sẽ không giới thiệu về library này mà sẽ xoáy sâu vào các thao…

Bài 5: Load Library Session Trong Codeigniter

Bài 5: Load Library Session Trong Codeigniter

Đây là một thư viện khá là quan trọng , trong framework CI (Codeigniter) .…

Bài 4: Load Model Trong Codeigniter

Bài 4: Load Model Trong Codeigniter

Trong Codeigniter để kết nối với Database chúng ta phải cấu hình thông tin cho…

Bài 3: Load View Trong Codeigniter

Bài 3: Load View Trong Codeigniter

Trong Codeigniter tất cả các Views đều được đặt trong thư mục application/views. Các bạn…

Top