Load class trên CodeIgniter

Load class trên CodeIgniter là một thành phần cực kỳ quan trọng. Nó được dùng để tải các bộ helper, thư viện, view, language, model ... Chúng ta sẽ gặp class này rất thường xuyên trong khi phát triển chương trình.

Class này được khởi tạo tự động bởi hệ thống cho nên chúng ta không cần khởi tạo chúng bằng tay.

1. Các phương thức có trên Load class.

a. Hàm $this->load->library('class_name', $config, 'object name').

Hàm này được sử dụng để tải các lớp trong Core system của CodeIgniter. 'class_name' là tên của lớp mà bạn muốn tải lên.

Ví dụ, nếu bạn muốn gửi mail bằng CodeIgniter, thì bước đầu tiên chúng ta phải tải email class trong controller.

$this->load->library('email');

Sau khi được tải lên, thì chúng ta có thể sử dụng các hàm của email class, như $this->email->some_function().

Các file mã nguồn của các bộ thư viện có thể được lưu trữ trong các thư mục con của thư mục 'libraries', hoặc bên trong thư mục application/libraries ( chứa các file do bạn tự modify). 

Để tải các file chứa trong một thư mục con, bạn cần phải truyền vào đường dẫn tương đối so với thư mục libraries . Ví dụ nếu file được đặt tại :

libraries/flavors/chocolate.php

Bạn sẽ tải bằng cách:

$this->load->library('flavors/chocolate');

Ngoài ra, chúng ta có thể tải nhiều thư viện đồng thời bằng cách truyền cho hàm này một mảng chứa các library cần thiết.

$this->load->library(array('email', 'table'));

Tham số thứ hai $config (tùy chọn), cho phép bạn tùy chỉnh truyền vào các cấu hình cần thiết. Ví dụ :

$config = array (
                  'mailtype' => 'html',
                  'charset'  => 'utf-8,
                  'priority' => '1'
               );
$this->load->library('email', $config);

Các tùy chọn cấu hình này có thể được cấu hình sẵn trong file config.php. 

Tham số thứ ba (tùy chọn), nếu để trống tham số này, thì bộ thư viện sẽ được gán vào một object cùng tên với tên thư viện. Ví dụ nếu tên thư viện là Session, thì nó sẽ được gán vào một biến tên là $this->session.

Nếu bạn thích thiết lập class của mình tự định nghĩa ra thì bạn có thể truyền giá trị vào tham số thứ ba này. Ví dụ : 

$this->load->library('session', '', 'my_session'); // Session class is now accessed using: $this->my_session

Xin lưu ý rằng, khi truyền giá trị vào tham số thứ nhất theo dạng mảng, thì tham số thứ 3 này sẽ bị loại bỏ.

b. Hàm $this->load->view('file_name', $data, true/false).

Hàm này được dùng để tải file View của bạn.

Tham số thứ nhất(bắt buộc), nó là tên của file view mà bạn muốn tải. Chú ý rằng các bạn không cần đưa cả phần đuôi mở rộng '.php' vào cùng tên file view này, hệ thống sẽ tự hiểu được.

Tham số thứ hai có thể là một mảng hoặc một object, chúng sẽ đi qua bộ hàm PHP extract để chuyển đổi thành giá trị để có thể được dùng trong file view.

Tham số thứ ba cho phép bạn thay đổi hành vi của hàm để nó trả về dữ liệu theo kiểu chuỗi thay vì trả dữ liệu cho trình duyệt. Tham số này rất hữu ích nếu bạn muốn xử lý dữ liệu liệu theo nhiều cách. Nếu bạn thiết lập tham số này là TRUE nó sẽ trả về dữ liệu. Mặc định là FALSE, và nó sẽ trả dữ liệu cho trình duyệt. Và nhớ là bạn phải gán giá trị cần truyền vào một biến mà bạn muốn trả về.

$string = $this->load->view('myfile', '', true);

c. Hàm $this->load->model('Model_name').

Hàm này để gọi Model mà bạn cần dùng lên. Nếu file Model được đặt trong một thư mục con nào đó, bạn cần truyền vào đường dẫn tương đối tới nó. Ví dụ, nếu bạn có một Model đặt trong thư mục application/models/blog/queries.php, thì bạn sẽ tải chúng như sau:

$this->load->model('blog/queries');

Nếu bạn muốn Model của bạn được gán vào tên của một object khác thì bạn có thể chỉ định nó thông qua tham số thứ hai. Ví dụ :

$this->load->model('Model_name', 'fubar');
$this->fubar->function();

d. Hàm $this->load->database('options', true/false).

Hàm này cho phép bạn tải lớp Database. Cả hai tham số là tùy chọn.

e. Hàm $this->load->vars($array).

Hàm nhận tham số là một mảng và sinh ra các biến sử dụng hàm PHP extract. Hàm này sẽ tạo ra kết quả tương tự như là việc sử dụng tham số thứ 2 của hàm $this->load->view() ở trên. Lý do mà ta muốn sử dụng hàm này độc lập là nếu bạn muốn thiết lập một vài biến tổng thể trong hàm constructor của controller, và muốn chúng luôn sẵn sàng ở một vài file view hoặc có thể lấy được ở nhiều hàm khác. Bạn có thể gọi hàm này nhiều lần. Dữ liệu sẽ được ghi đệm lại và trộn vào trong một mảng duy nhất.

f. Hàm $this->load->get_var($key).

Hàm này để kiểm tra mảng của các biến trong view của bạn. Hàm này rất hữu dụng khi một biết được thiết lập trong một library hoặc method khác có sử dụng hàm $this->load->vars(). 

g. Hàm $this->load->helper('file_name').

Hàm này dùng để tải các file helper, 'file_name' là tên của helper cần tải lên, lưu ý ta không cần truyền phần '_helper.php' đi kèm tên file.

h. Hàm $this->load->file('filepath/filename', true/false).

Đây là hàm dùng để tải file. Tham số là một file, hàm này sẽ mở và đọc file này. Mặc định là dữ liệu sẽ được gửi trả về trình duyệt, giống một file View, nhưng nếu bạn thiết lập tham số thứ 2 là TRUE thì nó sẽ trả về dữ liệu là một chuỗi.

i. Hàm $this->load->language('file_name').

Dùng để gọi bộ ngôn ngữ lên, hàm tắt của hàm này là $this->load->lang('file_name').

j. Hàm $this->load->config('file_name').

Hàm này dùng để tải một file config, hàm tắt là $this->config->load('file_name').

2. Các gói Ứng dụng.

Một gói ứng dụng cho phép bạn dễ dàng phân phối một bộ nguồn hoàn chỉnh chỉ trong một thư mục, bao gồm các bộ thư viện, model, helper, congig, language riêng. Chúng ta nên đặt chúng vào trong thư mục 'application/third_party'. Ví dụ về một gói ứng dụng :

/application/third_party/foo_bar
config/
helpers/
language/
libraries/
models/

Bất kể mục đích của gói ứng dụng 'Foo Bar' là gì, thì nó đều có các config, helper, language, library, model riêng. Để sử dụng chúng ở trong các controller thì bạn cần gọi đến Loader class mà bạn sẽ tải bộ nguồn từ một gói nào đó bằng hàm sau :

$this->load->add_package_path(APPPATH.'third_party/foo_bar/');
$this->load->library('foo_bar');

Đoạn chương trình ở trên sẽ sẽ gọi đến gói ứng dụng có một library tên là Foo_bar.php

Khi controller sử dụng xong bộ nguồn từ gói ứng dụng này, và cụ thể là bạn có một vài gói khác cần làm việc với nó, như vậy bạn sẽ muốn xóa bỏ đường dẫn tới gói này để Loader không sử dụng nó nữa. Để xóa bỏ đường dẫn mới nhất vừa được thêm vào, bạn đơn giản chỉ cần gọi hàm.

$this->load->remove_package_path().

Hoặc nếu bạn muốn chỉ định rõ gói muốn xóa bỏ khỏi Loader thì sẽ như sau :

$this->load->remove_package_path(APPPATH.'third_party/foo_bar/');

Tags: