Routing – Cách định tuyến URL trong CodeIgniter
Trong lập trình web, việc định tuyến (Routing) giúp xác định URL nào sẽ kích hoạt Controller và phương thức nào. CodeIgniter cung cấp hệ thống Routing linh hoạt giúp tối ưu hóa việc quản lý các đường dẫn trên website.
Mục tiêu bài học:
- Hiểu khái niệm Routing và cách CodeIgniter xử lý URL.
- Biết cách định tuyến cơ bản (GET, POST, PUT, DELETE).
- Sử dụng định tuyến động với tham số.
- Ứng dụng các kỹ thuật định tuyến nâng cao như Regular Expressions, Named Routes, Custom Filters.
- Thực hành xây dựng hệ thống định tuyến linh hoạt.

Routing – Cách định tuyến URL
1. Giới thiệu về Routing trong CodeIgniter
Routing là gì?
- Routing là quá trình xác định Controller nào sẽ xử lý một request dựa trên URL mà người dùng nhập vào.
- Trong CodeIgniter, hệ thống định tuyến giúp cải thiện SEO, tăng bảo mật và tối ưu hóa truy vấn.
Cách hoạt động của Routing trong CodeIgniter
- Khi người dùng nhập URL, CodeIgniter sẽ kiểm tra
Routes.php
để xác định Controller nào cần gọi. - Nếu không có route nào khớp, CodeIgniter sẽ hiển thị lỗi 404 Page Not Found.
File cấu hình Routing
- Trong CodeIgniter 3:
application/config/routes.php
- Trong CodeIgniter 4:
app/Config/Routes.php
Ví dụ về file Routes trong CodeIgniter 4:
<?php
$routes->get('/', 'Home::index'); // Định tuyến trang chủ
2. Định tuyến cơ bản (GET, POST, PUT, DELETE)
Trong CodeIgniter 4, các phương thức HTTP chính được hỗ trợ bao gồm:
Phương thức | Ý nghĩa |
---|---|
GET | Lấy dữ liệu |
POST | Gửi dữ liệu |
PUT | Cập nhật dữ liệu |
DELETE | Xóa dữ liệu |
Ví dụ về định tuyến cơ bản:
$routes->get('users', 'UserController::index'); // Lấy danh sách người dùng
$routes->post('users/create', 'UserController::create'); // Tạo người dùng mới
$routes->put('users/update/(:num)', 'UserController::update/$1'); // Cập nhật người dùng
$routes->delete('users/delete/(:num)', 'UserController::delete/$1'); // Xóa người dùng
Cách hoạt động:
- Khi người dùng truy cập
/users
,UserController@index
sẽ được gọi. - Khi gửi request POST tới
/users/create
,UserController@create
sẽ chạy. - Khi gửi request PUT tới
/users/update/1
,UserController@update(1)
sẽ chạy.
3. Định tuyến động với tham số
Khi nào cần dùng?
- Khi cần truyền tham số qua URL, ví dụ:
/product/1
,/user/5/edit
.
Cách truyền tham số trong CodeIgniter 4:
$routes->get('product/(:num)', 'ProductController::detail/$1'); // Nhận tham số số
$routes->get('blog/(:any)', 'BlogController::view/$1'); // Nhận tham số bất kỳ
Cách hoạt động:
- Nếu người dùng truy cập
/product/10
, CodeIgniter sẽ gọiProductController@detail(10)
. - Nếu người dùng truy cập
/blog/codeigniter-routing
, CodeIgniter sẽ gọiBlogController@view('codeigniter-routing')
.
4. Định tuyến nâng cao
Regular Expressions (Biểu thức chính quy)
Dùng để kiểm soát dữ liệu nhập vào bằng quy tắc cụ thể.
Ví dụ: Chỉ chấp nhận URL chứa số từ 1 đến 100.
$routes->get('page/(:num)', 'PageController::view/$1', ['filter' => 'regex:\d{1,2}']);
Named Routes (Định danh route)
Giúp đặt tên cho route để dễ sử dụng.
Khai báo Named Route:
$routes->get('dashboard', 'AdminController::index', ['as' => 'admin_dashboard']);
Gọi trong View hoặc Controller:
<?= route_to('admin_dashboard'); ?>
Custom Filters (Lọc request tùy chỉnh)
Giúp bảo vệ route bằng cách kiểm tra quyền truy cập.
Ví dụ: Bảo vệ route bằng Authentication Middleware
$routes->get('admin', 'AdminController::index', ['filter' => 'auth']);
5. Thực hành: Tạo hệ thống định tuyến linh hoạt
Bài tập:
Tạo trang hiển thị danh sách bài viết
- URL:
/posts
- Controller:
PostController@index
Tạo trang hiển thị chi tiết bài viết
- URL:
/posts/(:num)
- Controller:
PostController@show($1)
Chỉ cho phép người dùng đã đăng nhập truy cập trang admin
- URL:
/admin
- Controller:
AdminController@index
- Bảo vệ bằng filter
auth
Gợi ý giải pháp:
$routes->get('posts', 'PostController::index');
$routes->get('posts/(:num)', 'PostController::show/$1');
$routes->get('admin', 'AdminController::index', ['filter' => 'auth']);
Kết luận
- Routing giúp điều hướng request đến Controller phù hợp.
- Có thể sử dụng các phương thức HTTP như GET, POST, PUT, DELETE.
- Có thể truyền tham số động trong URL.
- Định tuyến nâng cao giúp kiểm soát request bằng Regex, Named Routes và Filters.
- Thực hành giúp nắm vững cách xây dựng hệ thống định tuyến linh hoạt.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com