Blog

Trong bài viết trước bạn và Công ty thiết kế website OTVINA đã tìm hiểu về cấu trúc thư mục và chương trình đầu tiên trong Codeigniter, trong bài viết này chúng ta sẽ tiếp tục tìm hiểu chi tiết hơn về Controller trong CodeIgniter.

Controller trong PHP

Học Codeigniter- Controller trong PHP

Nếu học tới CodeIgniter chắc hẳn bạn đã biết về mô hình MVC trong PHP, trong CI phần Controller cũng tương tự được sử dụng để xử lý dữ liệu và điều khiển cho toàn bộ ứng dụng web khi thiết kế website.

Nội dung bài viết hôm nay sẽ bao gồm:

  • Cách tạo Controller trong CodeIgniter
  • Truyền biến trong Controller như thế nào?
  • Cấu hình Controller mặc định
  • … và 1 số nội dung liên quan trong Controller của CodeIgniter

Tạo Controller mới cho CodeIgniter

Toàn bộ controller trong CodeIgniter được đặt trong thư mục application/controller, mặc định bạn sẽ thấy 1 file welcome.php bên trong thư mục controller, tương tự như bài trước chúng ta sẽ tạo 1 file bên trong là hello.php và nhập vào nội dung bên dưới:

<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Hello extends CI_Controller{
public function index(){
echo "Bài 3- Controller trong CodeIgniter";
}
public function goodbye(){
echo "Tạm biệt bạn, hẹn gặp bạn ở bài tiếp theo!";
}
}
?>

Dòng if(!defined(‘BASEPATH’)) exit(‘No direct script access allowed’); nghĩa là không cho phép truy cập trực tiếp vào file mà phải chạy qua index.php, nó giúp cho file của bạn bảo mật hơn.

Tiếp theo là tên lớp “Hello”, trong CI bạn phải đặt tên lớp trùng với tên file của nó nhưng phải viết hoa chữ cái đầu tiên và tất cả các controller phải kế thừ từ controller CI_Controller, đây là controller do CI xây dựng sẵn, nếu không extends nó chúng ta không thể sử dụng các thư viện có sẵn của CI.

Phương thức index() là phương thức mặc định được gọi của CodeIgniter, nghĩa là khi bạn gọi tới class nó sẽ tự động gọi phương thức này.

Gọi Controller

Như bài viết trước đã tìm hiểu, để gọi tới controller bạn vào trình duyệt gõ địa chỉ: http://localhost/duongdan/index.php/tencontroller/tenphuongthuc/

Đối với trường hợp trên, chúng ta gọi như sau: http://localhost/codeigniter/index.php/hello/index/ . Tuy nhiên bạn hoàn toàn có thể bỏ phần /index/ ở sau cùng đường dẫn bạn hoàn toàn có thể bỏ đi vì controller mặc định sẽ tự gọi phương thức index() nếu không tồn tại nó trên thanh địa chỉ.

Tuy nhiên nếu bạn muốn chạy phương thức goodbye() bạn phải gõ đầy đủ đường dẫn: http://localhost/codeigniter/index.php/hello/goodbye/ kết quả in ra màn hình sẽ là:”Tạm biệt, hẹn gặp bạn ở bài tiếp theo!”.

Truyền biến vào 1 Controller

Để truyền biến trên COdeigniter bạn chỉ cần truyền vào địa chỉ theo cấu trúc sau: http://localhost/duongdan/index.php/tencontroller/tenphuongthuc/bien1/bien2/bien3/. Nghĩa là giá trị các biến sẽ được đặt sau phương thức, như vậy chúng ta hoàn toàn có thể lấy được giá trị từ phương thức GET, để nhận được biến chúng ta sẽ truyền các biến vào khi tạo phương thức.

Ví dụ:

<?php
if(!defined('BASEPATH')) exit('Không cho phép truy cập trực tiếp');
class Hello extends CI_Controller{
public function index($hoten=''){
echo "Xin chào bạn ".$hoten;
}
}
?>

Vậy nếu khi gọi chúng ta gõ: http://localhost/codeigniter/index.php/hello/index/Tịnh

Thì kết quả trên màn hình của chúng ta sẽ là

Xin chào bạn Tịnh

trong trường hợp muốn truyền vào nhiều biến bạn chỉ cần viết tiếp ra sau giá trị các biến khác, và nhớ khởi tạo biến khi bạn tạo phương thức.

Lưu ý: Khi tạo ra phương thức( function) nếu truyền biến vào bạn phải gán giá trị mặc định cho nó, vì trường hợp nếu người dùng truy cập http://localhost/codeigniter/index.php/hello/index/ thì CI sẽ không xác định được biến $hoten và như vậy chúng ta sẽ gặp phải lỗi.

Ví dụ 2:

<?php
if(!defined('BASEPATH')) exit('Không cho phép truy cập trực tiếp');
class Hello extends CI_Controller{
public function index($hoten='',$tuoi=0){
echo "Chào các bạn tôi là: ".$hoten. " năm nay tôi ".$tuoi." tuổi";
}
}

Vậy nếu chúng ta chạy:

  • http://localhost/codeigniter/index.php/hello/index/ kết quả sẽ là: Chào các bạn tôi là:  năm nay tôi 0 tuổi. ( Vì thiếu giá trị ở đường dẫn nó sẽ lấy giá trị mặc định).
  • http://localhost/codeigniter/index.php/hello/index/Tịnh/24 kết quả sẽ là: Chào các bạn tôi là: Tịnh năm nay tôi 24 tuổi
  • http://localhost/codeigniter/index.php/hello/index//24 kết quả sẽ là Chào các bạn tôi là:  năm nay tôi 24 tuổi

Cấu hình Controller mặc định

Mặc định khi bạn không gọi controller nào thì Codeigniter sẽ chạy vào controller welcome( cái file welcome.php ban đầu có), vì vậy nếu bạn muốn mặc định khi chạy vào địa chỉ http://localhost/codeigniter/index.php mà nó gọi ngay vào controller hello.php ( hoặc controller khác mà bạn muốn) thì bạn làm như sau:

  • Mở file application/config/routes.php
  • Tìm dòng $route[‘default_controller’] = “welcome”; sau đó sửa welcome thành controller bạn muốn đặt làm mặc định.
  • Sau đó bạn chỉ việc chạy http://localhost/codeigniter/ để gọi ra controller đó <3

Hàm khởi tạo

Mặc định trong PHP khi làm với hướng đối tượng thì hàm khởi tạo sẽ đặt trùng tên với tên lớp hoặc đặt là __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ì 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
{
    function __construct() {
        // Gọi đến hàm khởi tạo của cha
        parent::__construct();
    }
    public function index()
    {
        echo 'Hello from Vũ Công Tịnh';
    }
}

Vậy là trong bài này chúng ta đã tìm hiểu những kiến thức chính để có thể bắt đầu với Controller trong CodeIgniter, hy vọng bài viết sẽ hữu ích với bạn, đừng quên like và share để động viên OTVINA nhé các bạn <3