Controller?
Controller là file class có tên tương ứng với một URI (dịch theo user guide :v). Ví dụ:
localhost/learnci/index.php/blog/ sẽ gọi đến controller class Blog trong file blog.php.
HelloWorld
(Vẫn sử dụng project hôm trước nha) trong application/controllers tạo file blog.php với nội dung như sau:
<?php
class Blog extends CI_Controller {public function index()
{
echo ‘Hello World!’;
}
}
?>
Truy cập: localhost/learnci/index.php/blog sẽ thấy hiển thị dòng chữ Hello World! Dễ hiểu phải không nào :))
Lưu ý rằng controller class phải viết hoa chữ cái đầu tiên, và phải extends CI_Controller.
Function
Mặc định khi trong URI không có tham số function thì index() sẽ được gọi. Bạn có thể thêm vào class trên vài hàm nữa và test thử xem!
Ta cũng có thể truyền cho hàm các tham số. Ví dụ ta thêm vào class trên một function sum() tính tổng 3 tham số:
<?php
public function sum($a, $b, $c)
{
$sum = $a + $b + $c;
echo $sum;
}
Thử gõ lên trình duyệt: localhost/learnci/index.php/sum/1/3/5 và xem kết quả!
Controller mặc định
CodeIgniter cho phép xác định controller mặc định khi URL không gọi đến 1 controller nào cả. Bạn có thể tìm thấy và thay đổi cấu hình này trong application/config/routes.php thông qua biến $route[‘default_controller’].
Remapping function calls
Sử dụng function _remap() trong controller sẽ làm thay đổi một chút xử lý của ứng dụng. Cụ thể là thay vì tìm function tương ứng với URI, nó sẽ gọi _remap() trước. Ví dụ hàm _remap() có nội dung như sau:
public function _remap($method, $params = array())
{
$method = ‘process_’.$method;
if (method_exists($this, $method))
{
return call_user_func_array(array($this, $method), $params);
}
show_404();
}
Giải thích một chút: hàm này sẽ thêm 1 tiền tố vào URI (process_), sau đó kiểm tra nếu function trên tồn tại nó sẽ gọi đến, ngược lại show_404().
Như vậy bằng cách sử dung _remap() ta sẽ kiểm soát được việc xử lý request và gọi function trong controller.
Tùy biến Output
CI có 1 class cho phép ta xử lý output (luồng dữ liệu ra). Chi tiết class này bạn có thể tìm hiểu trên user guide của CI. Nếu trong controller có hàm _output() thì nó sẽ gọi hàm này ở cuối thay vì echo dữ liệu ra như bình thường. Ta có thể sử dụng _output() để cache file trước khi render dữ liệu ra trình duyệt (cái này mình sẽ nói rõ hơn trong phần cache).
Private functions
Cái này học lập trình hướng đối tượng thì các bạn phải biết. Private functions không cho phép gọi từ ngoài class. Để tạo một private function bạn chỉ cần thêm từ khóa private trước function đó thay vì public.
Tổ chức controller của bạn vào một thư mục con
Bạn có thể tổ chức controller của bạn vào từng nhóm thư mục con để dễ quản lý, đơn giản chỉ là trong application/controllers tạo thêm một thư mục và lưu các file controller class vào trong đó. Tuy nhiên trong URI trước controller bạn cần thêm vào tên thư mục con đó. Ví dụ bạn tạo thêm thư mục my_controller trong đó có controller product.php chẳng hạn, khi gọi URI phải có dạng: index.php/my_controller/product
Hàm khởi tạo
Hàm khởi tạo là một kỹ thuật trong lập trình hướng đối tượng. Nếu trong controller bạn sử dụng hàm khởi tạo _construc() thì phải lưu ý thêm dòng lệnh sau:
parent::_construct();
Sử dụng hàm khởi tạo bạn có thể tùy biến controller của bạn ví dụ như load sẵn model hay một vài thư viện cần thiết nào đó, sau này trong các function bạn không cần quan tâm đến việc load nó lần nữa. That’s it!