Trong CodeIgniter 3, Controller là thành phần trung tâm trong mô hình MVC (Model-View-Controller) chịu trách nhiệm xử lý yêu cầu từ người dùng, tương tác với các mô hình dữ liệu (Models), và gửi dữ liệu đến view để hiển thị.

Dưới đây là hướng dẫn chi tiết về cách tạo và sử dụng Controller trong CodeIgniter 3:

1. Tạo Controller Mới

Để tạo một Controller mới trong CodeIgniter 3:

  1. Tạo file controller:
    • Controller được đặt trong thư mục application/controllers.
    • Tạo một file PHP mới trong thư mục này với tên file kết thúc bằng .php. Ví dụ: Welcome.php.
  2. Khai báo lớp Controller:
    • Tên lớp Controller phải bắt đầu bằng chữ in hoa và trùng với tên file. Ví dụ, file Welcome.php sẽ có lớp Welcome.
    • Controller mới phải kế thừa từ lớp CI_Controller.

Ví dụ về Controller cơ bản:

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

class Welcome extends CI_Controller {

    public function index() {
        // Đây là phương thức mặc định được gọi khi không chỉ định phương thức
        echo "Hello, CodeIgniter!";
    }
}

2. Định nghĩa các Phương thức trong Controller

Trong Controller, bạn có thể định nghĩa các phương thức (method) để xử lý các yêu cầu khác nhau. Mỗi phương thức có thể được truy cập qua URL tương ứng.

Ví dụ:

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

class Blog extends CI_Controller {

    public function index() {
        echo "Đây là trang blog!";
    }

    public function post($id) {
        echo "Xem bài viết có ID: " . $id;
    }
}

Với Controller trên:

  • Truy cập http://yourdomain.com/index.php/blog sẽ gọi phương thức index().
  • Truy cập http://yourdomain.com/index.php/blog/post/1 sẽ gọi phương thức post() với tham số $id là 1.

3. Nạp và Sử dụng Model và View

Controller có thể nạp Model để làm việc với dữ liệu và View để hiển thị kết quả.

Nạp Model:

public function __construct() {
    parent::__construct();
    // Nạp model tên là 'Post_model'
    $this->load->model('Post_model');
}

Sử dụng Model:

public function get_post($id) {
    // Gọi phương thức 'get_post' của 'Post_model' để lấy dữ liệu
    $post = $this->Post_model->get_post($id);
    print_r($post);
}

Nạp và Sử dụng View:

public function view_post($id) {
    $data['post'] = $this->Post_model->get_post($id);
    // Nạp view 'post_view' và truyền dữ liệu tới view
    $this->load->view('post_view', $data);
}

4. Truyền dữ liệu từ Controller sang View

Dữ liệu được truyền từ Controller sang View dưới dạng một mảng:

public function show_data() {
    $data['title'] = 'Trang chủ';
    $data['content'] = 'Chào mừng đến với CodeIgniter 3!';
    $this->load->view('home_view', $data);
}

Trong View home_view.php, bạn có thể sử dụng biến $title$content như sau:

<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <title><?php echo $title; ?></title>
</head>
<body>
    <h1><?php echo $title; ?></h1>
    <p><?php echo $content; ?></p>
</body>
</html>

5. Sử dụng Thư viện và Trợ lý (Libraries & Helpers)

CodeIgniter cung cấp rất nhiều thư viện và trợ lý sẵn có để tăng tốc phát triển ứng dụng.

Nạp thư viện:

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

Sử dụng thư viện:

$this->session->set_userdata('username', 'john');

Nạp trợ lý:

$this->load->helper('url');

Sử dụng trợ lý:

echo base_url('welcome');

6. Bảo mật trong Controller

Khi làm việc với dữ liệu đầu vào từ người dùng, luôn sử dụng các hàm của CodeIgniter để đảm bảo tính bảo mật.

Ví dụ, để lấy dữ liệu từ URL một cách an toàn, sử dụng:

$id = $this->input->get('id', TRUE); // TRUE để bật tính năng xss_clean

7. Redirect và Flashdata

Redirect:

Sử dụng redirect() để chuyển hướng người dùng:

redirect('welcome/index');

Flashdata:

Flashdata là dữ liệu chỉ tồn tại cho đến lần yêu cầu kế tiếp. Sử dụng để hiển thị thông báo:

$this->session->set_flashdata('message', 'Đăng nhập thành công!');
redirect('dashboard');

Trong View:

echo $this->session->flashdata('message');

8. Các Tính năng Bổ sung

  • Middleware và Hook: Để mở rộng khả năng của Controller, bạn có thể sử dụng hooks để thực thi đoạn mã trước hoặc sau khi Controller thực thi.
  • Custom Controller Base Class: Bạn có thể tạo một lớp cơ sở tùy chỉnh mà tất cả các Controller của bạn sẽ kế thừa để chia sẻ các phương thức chung.

Kết luận

Controller trong CodeIgniter 3 rất linh hoạt và dễ sử dụng. Nắm vững cách tạo và sử dụng chúng sẽ giúp bạn xây dựng các ứng dụng web một cách hiệu quả và dễ dàng.