Hướng dẫn Controller trong Codeigniter

Hướng dẫn Controller trong Codeigniter là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Hướng dẫn Controller trong Codeigniter sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và Codeigniter nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

1. Tạo Mới Controller Trong Codeigniter

Tất cả các controller trong codeigniter đều được đặt trong thư mục Application/Controllers của CI. Mặc định khi cài đặt CI đã tạo một controller tên là welcom.php, bạn xóa file này đi và tạo một file hello.php và điền nội dung vào là:

Trong đó:

if (!defined('BASEPATH'))
exit('No direct script access allowed');
  
class Hello extends CI_Controller {
  
    public function index() {
        echo 'Hoidapcode.com Hello Controller';
    }
}

Dòng if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’); là dòng Security bảo vệ file của các bạn, nó không cho truy cập thẳng vào file mà phải thông qua file index.php ở mức ngoài cùng.


Lớp Hello là tên Controller của chúng ta, nó kế thừa lớp CI_Controller của hệ thống Codeigniter, tất cả các Controller đều phải kế thừa CI_Controller thì mới sử dụng được các thư viện của CI và tên Controller phải bắt đầu bằng chữ hoa.


Hàm index là Action (method) của controller,. đây là một hàm mặc định của tất cả các controller trong Codeigniter nghĩa là nếu đường dẫn bạn chỉ gõ domain.com/hello thì mặc định nó sẽ chạy file index


Bạn ra trình duyệt gõ đường dẫn localhost/ten_project/index.php/hello/index, kết quả xuất ra màn hình là dòng “Hoidapcode.com Hello Controller” thì chúng ta đã tạo mới thành công rồi.


Bạn vào file Controller Hello thêm một hàm other mới như sau:

class Hello extends CI_Controller {
  
    public function index() {
        echo 'Hoidapcode.com Hello Controller';
    }
  
    public function other(){
        echo 'Hoidapcode.com Other Controller';
    }
}


 Như vậy là ta đã tạo thêm một hàm (Action) mới trong controller Hello, bây giờ bạn ra trình duyệt gõ đường dẫn “localhost/codeigniter/index.php/hello/other” màn hình se xuất hiện dòng “Hoidapcode.com Other Controller”.


Qua hai ví dụ trên ta thấy mỗi Controller trong Codeigniter ta có thể tạo nhiều Action (hàm) trong đó, và mỗi action sẽ có những nhiệm vụ riêng biệt.

2. Truyền Biến Vào Controller

Trong mô hình MVC của các Framwork, biến truyền vào theo phương thức GET đều có dạng “domain.com/controller/action/parameter1/parameter2/…”, Trong Codeigniter cũng vậy để truyền biến vào Controller bạn sẽ có đường dẫn là “domain.com/index.php/controller/action/parameter1/parameter2/…” Trong hàm (Action) của controller ta sẽ nhận nó bằng cách truyền những biến có vị trí tương ứng với từng parameter trên url.


Ví dụ 1:

 

class Hello extends CI_Controller
{
    public function index($message = '')
    {
        echo 'Hoidapcode.com ' . $message;
    }
}

  Bạn ra trình duyệt gõ đường dẫn “localhost/codeigniter/index.php/hello/index/Hello Codeigniter Newbie“  thì màn hình sẽ xuất hiện chữ “Hoidapcode.com Hello Codeigniter”. Bạn hãy thử thay đổi biến truyền vào để kiểm tra sự huyền diệu của nó.Biến $message truyền vào hàm (action) index mình gán nó giá trị khởi tạo bằng giá trị trống ”. Tại sao mình phải làm vậy ? tại vì theo nguyên tắc tất cả các hàm nếu truyền không đủ biến vào nó sẽ bị lỗi, nếu ta không gán giá trị mặc định thì nếu người dùng chỉ gõ “localhost/codeigniter/index.php/hello/index/” nó sẽ bị lỗi ngay, vì thế tất cả các biến truyền vào bạn phải gán giá trị mặc định để cho an toàn.


Ví dụ 2:

 

class Hello extends CI_Controller
{
    public function index($id = 0, $message = '')
    {
        echo 'Hoidapcode.com ID='.$id.' AND message ='.$message;
    }
} 


  • Trong ví dụ này mình truyền 2 biến vào hàm (action) index và gán giá trị mặc định cho biến, bây giờ bạn thử ra trình duyệt gõ các đường dẫn sau:localhost/codeigniter/index.php/hello/index/12/Hello => kết quả là “Hoidapcode.com ID = 12 AND message = Hello”
  • localhost/codeigniter/index.php/hello/index/12 => kết quả là “Hoidapcode.com ID = 12 AND message = ”
  • localhost/codeigniter/index.php/hello/index//Hello => kết quả là “Hoidapcode.com ID = AND message = Hello”

Qua ba ví dụ trên ta thấy các biến truyền vào hàm nó tuân theo thứ tự trên URL.

3. Xác Định Controller Mặc Định

Controller mặc định là controller sẽ được gọi khi trên url bạn không gọi đến một controller nào. Bạn vào file application/config/routes.php kéo xuống phía dưới tìm đến dòng $route['default_controller'] = “welcome”;.Tại đây bạn sửa giá trị của biến $route['default_controller'] thành tên controller mà bạn muốn chạy mặc định, ví dụ tôi sẽ sửa thành $route['default_controller'] = “hello/other”; sau đó ra trình duyệt gõ đường dẫn “localhost/codeigniter” thì mặc định nó sẽ chạy đến controller “hello/other”.

4. Hàm Khởi Tạo

Trong lập trình hướng đối tượng thì tất cả các lớp đối tượng có hàm khởi tạo, hàm này sẽ chạy đầu tiên khi bạn khởi tạo một đối tượng mới. Trong PHP hàm khởi tạo được quy ước là đặt trùng tên với tên Lớp hoặc là bạn đặt tên __construct().


Nếu trong Controller bạn muốn sử dụng hàm khởi tạo thì bắt buộc bạn phải gọi đến hàm khởi tạo của cha nó (CI_Controller), vì trong PHP nếu hàm con kế thừa hàm cha mà hàm con có hàm khởi tạo thì nó sẽ chạy hàm khởi tạo của con chứ không chạy hàm khởi tạo của cha, mà trong hàm khởi tạo của cha lại chứa những đoạn code thiết lập hệ thống cho CI nên bắt buộc phải chạy nó.

 

class Hello extends CI_Controller
{
    // Hàm khởi tạo
    function __construct() {
        // Gọi đến hàm khởi tạo của cha
        parent::__construct();
    }
  
    public function index()
    {
        echo 'Hoidapcode.com';
    }
}

5. Xóa Đường Dẫn Index.php trong codeigniter

Trong các ví dụ trên URL để gọi Controller trong codeigniter luôn có file index.php nhìn rất là mất thẫm mỹ, để bỏ file index.php trên đường dẫn url trong codeigniter bạn làm như sau:

Tạo file .htaccess cùng cấp với file index.php, tức là ở ngoài cùng, sau đó copy nội dung này vào.

 

Options +FollowSymlinks

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.+)/?$ index.php/$1 [L]

Sau đó bạn ra trình duyệt gõ URL “localhost/codeigniter/hello/other” thì CI tự động hiểu và gọi đến Controller Hello và hàm (Action) other

Lời Kết:

Trong bài này tôi chỉ hướng dẫn các bạn cách sử dụng controller trong codeigniter đơn giản, còn rất nhiều kiến thức khác nhưng tôi nghĩ các bạn chưa cần tới vội nên tôi sẽ đề cập đến trong một bài nâng cao hơn. Bài tiếp theo chúng ta sẽ tìm hiêu cách load view trong codeigniter.


Hy vọng với bài viết về Hướng dẫn Controller trong Codeigniter đã giải đáp giúp bạn phần nào về kiến thức lập trình Codeigniter. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!