Thời gian đọc: 6 phút
Trong CodeIgniter 3, file routes.php
nằm trong thư mục application/config/
và được sử dụng để định nghĩa các quy tắc định tuyến (routing) cho ứng dụng. Routing cho phép bạn ánh xạ các URL đến các controller và phương thức cụ thể trong ứng dụng của bạn. Điều này giúp tạo ra các URL thân thiện với người dùng và dễ quản lý hơn.
Dưới đây là hướng dẫn chi tiết cách sử dụng file routes.php
trong CodeIgniter 3.
routes.php
File routes.php
có cấu trúc cơ bản như sau:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['default_controller']
: Đây là controller mặc định mà CodeIgniter sẽ tải khi không có URI cụ thể nào được cung cấp. Ví dụ: khi bạn truy cập example.com/
, CodeIgniter sẽ tải controller được chỉ định ở đây. Theo mặc định, nó được đặt là welcome
.$route['404_override']
: Chỉ định controller/method nào sẽ được sử dụng nếu không có tuyến nào khớp với URI. Đây là trang lỗi 404 tùy chỉnh của bạn.$route['translate_uri_dashes']
: Khi được đặt là TRUE
, CodeIgniter sẽ thay thế tất cả các dấu gạch ngang trong URI bằng dấu gạch dưới. Điều này rất hữu ích nếu bạn sử dụng dấu gạch ngang trong URL nhưng phương thức hoặc tên controller không thể chứa dấu gạch ngang (vì lý do cú pháp PHP).Một quy tắc định tuyến cơ bản ánh xạ một URI cụ thể đến một controller và phương thức.
$route['product'] = 'catalog/product';
Trong ví dụ này:
example.com/product
, CodeIgniter sẽ tải controller Catalog
và gọi phương thức product()
của nó.Bạn có thể định tuyến với các tham số được chỉ định trong URL.
$route['product/(:num)'] = 'catalog/product_lookup/$1';
(:num)
là một regex pattern (biểu thức chính quy) xác định rằng chỉ số này phải là số.$1
là tham số đầu tiên bắt được từ regex pattern và được truyền vào phương thức product_lookup
của controller Catalog
.Ví dụ: example.com/product/123
sẽ gọi Catalog::product_lookup(123)
.
Bạn có thể sử dụng regex để ánh xạ các chuỗi ký tự cụ thể.
$route['profile/(:any)'] = 'user/profile/$1';
(:any)
khớp với bất kỳ chuỗi nào (số, chữ cái, hoặc ký tự khác).Ví dụ: example.com/profile/john_doe
sẽ gọi User::profile('john_doe')
.
Bạn có thể định tuyến đến nhiều cấp trong một controller hoặc method.
$route['blog/(:any)/(:num)'] = 'blog/view/$1/$2';
Ví dụ: example.com/blog/my-first-post/12
sẽ gọi Blog::view('my-first-post', 12)
.
CodeIgniter sử dụng một số mẫu regex thông dụng để giúp bạn định tuyến các URI một cách dễ dàng:
(:num)
: Bất kỳ số nào (0-9)(:any)
: Bất kỳ ký tự nào (bao gồm số, chữ cái, và dấu gạch ngang, v.v.)(:segment)
: Bất kỳ đoạn URI nào (ngoại trừ dấu gạch chéo /
)Bạn cũng có thể tạo các mẫu regex tùy chỉnh. Ví dụ:
$route['post/([a-zA-Z]+)/(\d+)'] = 'post/view/$1/$2';
default_controller
).
$route['product'] = 'catalog/product';
$route['product'] = 'store/product';
Trong trường hợp này, tuyến 'product'
sẽ luôn được ánh xạ đến store/product
vì đây là định nghĩa cuối cùng.
Nếu bạn cần các định tuyến phức tạp hơn, bạn có thể sử dụng các regex phức tạp hơn.
Ví dụ: Định tuyến khớp với một ngày tháng cụ thể:
$route['archive/(\d{4})/(\d{2})/(\d{2})'] = 'archive/show/$1/$2/$3';
\d{4}
: Khớp với bốn chữ số (năm)\d{2}
: Khớp với hai chữ số (tháng và ngày)URL example.com/archive/2024/09/01
sẽ gọi Archive::show('2024', '09', '01')
.
Bạn có thể tạo các tuyến tùy chỉnh để định nghĩa các quy tắc routing phức tạp hơn hoặc không theo một mẫu cụ thể.
$route['my-custom-route'] = 'controller/method';
redirect()
Trong một số trường hợp, bạn có thể muốn chuyển hướng từ một tuyến đến một tuyến khác mà không cần xử lý logic trong controller.
Ví dụ:
$route['old-route'] = 'new-route';
Ngoài ra, bạn có thể sử dụng hàm redirect()
trong controller để chuyển hướng người dùng:
public function old_route() {
redirect('new-route');
}
$route['translate_uri_dashes']
để tự động chuyển dấu gạch ngang thành dấu gạch dưới.echo
hoặc hàm log_message()
để debug và kiểm tra các tuyến khi cần thiết.routes.php
trong CodeIgniter 3 là một công cụ mạnh mẽ để tùy chỉnh cách ứng dụng của bạn xử lý các URI. Hiểu và sử dụng nó đúng cách sẽ giúp bạn tạo ra các ứng dụng linh hoạt, thân thiện với người dùng và dễ quản lý.