Routing – Cách định tuyến URL trong CodeIgniter

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 1 tháng 4, 2025

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ọi ProductController@detail(10).
  • Nếu người dùng truy cập /blog/codeigniter-routing, CodeIgniter sẽ gọi BlogController@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.
Website Logo

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.

Bình luận

Website Logo

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

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ