Routing là gì? Sức mạnh của Routing trong lập trình PHP như thế nào? Dưới đây sẽ là những kiến thức hữu ích dành cho sinh viên ngành Công nghệ thông tin tại FPT Polytechnic. Hãy cùng khám phá “sức mạnh” qua bài viết sau.
Routing là gì?
Trong lập trình PHP, “routing” thường được hiểu là quá trình xác định cách các yêu cầu HTTP của người dùng được định tuyến đến các điều khiển (controllers) và hành động (actions) tương ứng trong ứng dụng web của bạn. Routing giúp quản lý cách các URL được xử lý và điều hướng đến các phần của mã nguồn của bạn để thực hiện các tác vụ cụ thể.
Một hệ thống routing thường định nghĩa một bản đồ URL và liên kết chúng với các hành động cụ thể hoặc điều khiển trong ứng dụng. Khi một yêu cầu HTTP đến, hệ thống routing sẽ phân tích URL và xác định nơi nó nên được xử lý.
Ví dụ, nếu bạn có một ứng dụng PHP và có một đường dẫn như “/product/detail/123”, hệ thống routing có thể được cấu hình để hiểu rằng đây là yêu cầu để hiển thị thông tin chi tiết về sản phẩm có ID là 123. Điều này sẽ đưa bạn đến một điều khiển và một hành động cụ thể để xử lý việc hiển thị thông tin sản phẩm.
Bạn có nhiều cách để thực hiện Routing cho website: Có thể tự xây dựng routing thông qua class trong lập trình hườn đối tượng PHP hoặc có thể sử dụng thư viện của composer hoặc thư viện của frameworks như Laravel, Symfony, Slim … sẽ giúp quản lý routing và các tác vụ khác một cách hiệu quả và dễ dàng hơn.
Xây dựng lớp Route với lập trình hướng đối tượng PHP
- Tạo lớp Router
class Route {
private static $routes = [];
public static function showroutes(){
return self::$routes;
}
public static function add($uri, $controller) {
$uri=”#^”.$uri.”$#”;
self::$routes[] = [‘uri’ => $uri, ‘controller’ => $controller];
}
public static function dispatch($uri) {
foreach (self::$routes as $route) {
if (preg_match($route[‘uri’], $uri,$matches)) {
if(count($matches)>0){
list($controller, $method) = explode(‘@’, $route[‘controller’]);
$controllerClass = ‘App\Controllers\\’ . $controller;
$controllerInstance = new $controllerClass();
$controllerInstance->$method();
return;
}
}
}
echo ‘404 Not Found’;
}
}
- Cách sử dụng class Route
Sử dụng phương thức add của class Route để thực hiện khai báo và quản lý các route
Route::add(‘/’, ‘HomeController@index’);
Route::add(‘/index’, ‘HomeController@index’);
Route::add(‘/product’, ‘ProductController@index’);
Route::add(‘/product/detail/(\d+)’, ‘ProductController@detail’);
Route::add(‘/product/idcatalog/(\d+)’, ‘ProductController@index’);
Route::add(‘/product/search/(\w+)’, ‘ProductController@index’);
Route::add(‘/product/sotrang/(\d+)’, ‘ProductController@index’);
Route::add(‘/productstyle’, ‘ProductController@productstyle’);
Route::add(‘/cart’, ‘CartController@index’);
Route::add(‘/addcart’, ‘CartController@index’);
Route::add(‘/checkout’, ‘CartController@checkout’);
Route::add(‘/profile’, ‘UserController@profile’);
Route::add(‘/taikhoancuatoi’, ‘UserController@profile’);
Route::add(‘/licsumuahang’, ‘UserController@profile’);
Route::add(‘/binhluancuatoi’, ‘UserController@profile’);
Route::add(‘/login’, ‘UserController@index’);
Route::add(‘/logout’, ‘UserController@logout’);
Route::add(‘/signin’, ‘UserController@signin’);
….
Sau đó, sử dụng phương thức $_GET để lấy yêu cầu từ người dùng và sử dụng phương thức dispatch() của class route để load dữ liệu và chuyển trang thông qua Controller.
$uri = isset($_GET[‘url’]) ? “/”.rtrim($_GET[‘url’], ‘/’) : ‘/index’;
Route::dispatch($uri);
Routing trong framework Laravel
Trong Laravel, routing là một phần quan trọng của framework và được thực hiện một cách mạnh mẽ và linh hoạt. Laravel cung cấp một cú pháp rõ ràng và dễ đọc cho việc định tuyến các yêu cầu HTTP đến các điều khiển và hành động tương ứng. Dưới đây là một số điểm quan trọng về cách Laravel thực hiện routing:
- File Routes
Laravel sử dụng file routes/web.php để định nghĩa các routes cho các yêu cầu web. Ngoài ra, nếu bạn muốn định nghĩa các routes API, bạn có thể sử dụng file routes/api.php.
Route::get(‘/’, ‘HomeController@index’);
Route::get(‘/products/{id}’, ‘ProductController@show’);
Trong ví dụ trên, Route::get định nghĩa một route cho phương thức HTTP GET. Bạn cũng có thể sử dụng Route::post, Route::put, Route::delete và các phương thức khác tương ứng với các phương thức HTTP khác.
- Controller và Action:
Laravel sử dụng mô hình MVC, vì vậy bạn có thể liên kết các route với các phương thức trong các controller.
// app/Http/Controllers/HomeController.php
namespace App\Http\Controllers;
class HomeController extends Controller {
public function index() {
return view(‘home’);
}
}
// app/Http/Controllers/ProductController.php
namespace App\Http\Controllers;
class ProductController extends Controller {
public function show($id) {
// Xử lý hiển thị thông tin sản phẩm có ID là $id
}
}
- Middleware:
Laravel cung cấp middleware để thực hiện các tác vụ như xác thực, kiểm tra quyền truy cập, và các xử lý trước và sau khi route được xử lý.
- Named Routes:
Bạn có thể đặt tên cho các routes để dễ dàng xác định và sử dụng chúng trong mã nguồn. Điều này làm cho việc thay đổi URL trở nên dễ dàng mà không ảnh hưởng đến mã nguồn.
// Đặt tên cho route
Route::get(‘/dashboard’, ‘DashboardController@index’)->name(‘dashboard’);
// Sử dụng tên route trong mã nguồn
$url = route(‘dashboard’);
- Route Parameters:
Bạn có thể định nghĩa các tham số trong route để bắt giá trị từ URL.
Route::get(‘/products/{id}’, ‘ProductController@show’);
Trong trường hợp trên, $id sẽ là một tham số được truyền vào phương thức show của ProductController.
Đối với Laravel, một số cấu hình và tùy chọn khác liên quan đến routing có thể được thiết lập trong file config và các tập tin khác. Điều này giúp bạn tùy chỉnh hệ thống routing theo nhu cầu cụ thể của dự án
Routing không chỉ là một phần quan trọng của kiến trúc website mà còn giúp quản lý, duy trì và phát triển trang web hiệu quả. Trong lập trình hướng đối tượng PHP và framework PHP, sử dụng routing đúng cách giúp tối ưu hóa quá trình phát triển và bảo dưỡng website một cách nhanh chóng và chuyên nghiệp.