-
1. Giới thiệu về route trong laravel
Route là một khái niệm quan trọng trong Laravel, được dùng để xác định cách xử lý các yêu cầu HTTP đến ứng dụng của bạn. Nó là một trong những thành phần cốt lõi của Laravel bên cạnh controller, middleware, model... Route trong laravel cung cấp một tiếp cận linh hoạt cho việc xử lý các yêu cầu(request) HTTP.
Trong bài viết này, chúng ta sẽ tìm hiểu về Route trong Laravel, cách sử dụng nó, cấu trúc của một Route và cách đăng ký Route trong ứng dụng Laravel của bạn.
Nếu bạn chưa biết laravel là gì hoặc chưa nắm rõ vòng đời trong laravel bạn có thể tham khảo thêm các bài viết trước đó:
Laravel là gì? Giới thiệu về laravel
2. Route trong Laravel
2.1. Khái niệm
Route trong Laravel dùng để xác định và xử lý các yêu cầu(request) HTTP đến ứng dụng của bạn. Các yêu cầu này có thể là GET, POST, PUT, PATCH hoặc DELETE. Route cho phép bạn xác định và xử lý các yêu cầu HTTP này bằng cách chỉ định một URI và một hàm xử lý tương ứng.
Mỗi Route trong Laravel có một URI, một phương thức HTTP và một hàm xử lý tương ứng. Khi một yêu cầu HTTP đến ứng dụng của bạn, Laravel sẽ kiểm tra tất cả các Route đã đăng ký và chọn Route phù hợp nhất để xử lý yêu cầu đó.
2.2. Cấu trúc Route
Một Route trong Laravel có cấu trúc cơ bản như sau:
Route::[phương thức]('[URI]', '[Hàm xử lý]'); Ví dụ: Route::get('/user', 'UserController@index');
Trong đó:
-
[phương thức]: là phương thức HTTP được sử dụng để xử lý yêu cầu. Các phương thức HTTP bao gồm GET, POST, PUT, PATCH và DELETE(hoặc bạn có thể dùng ANY để nhận tất cả các request đến ứng dụng).
-
[URI]: là đường dẫn đến Route. Đây là phần định danh của Route.
-
[Hàm xử lý]: là hàm xử lý được gọi khi Route được truy cập. Hàm xử lý này có thể là một hàm trong một Controller hoặc là một Closure.
3. Cách sử dụng Route Laravel
Để đăng ký Route trong Laravel, bạn có thể sử dụng phương thức Route trong file "web.php" hoặc "api.php" (ngoài ra bạn cũng có thể khai báo tên file tuỳ ý nhưng bạn phải đăng ký nó trong provinder). Tệp "web.php" được sử dụng để đăng ký các Route cho các yêu cầu HTTP từ trình duyệt của người dùng, trong khi tệp "api.php" được sử dụng để đăng ký các Route cho các API của các ứng dụng khác.
Để đăng ký một Route với Laravel, bạn chỉ cần sử dụng phương thức Route tương ứng với phương thức HTTP của yêu cầu. Sau đó, bạn chỉ định URI và hàm xử lý tương ứng.
Ví dụ, để đăng ký một Route GET đến URI "/user" và gọi hàm "index" trong Controller "UserController", bạn có thể sử dụng mã như sau:
Route::get('/user', 'UserController@index'); // Hoặc ... user App/Http/Controller/UserController; ... Route::get('/user', [UserController::class, 'index']);
Nếu bạn muốn đăng ký một Route POST đến URI "/user" và gọi hàm "store" trong Controller "UserController", bạn có thể sử dụng mã như sau:
Route::post('/user', 'UserController@store');
Laravel cũng cung cấp các phương thức Route khác như PUT, PATCH và DELETE để đăng ký các Route tương ứng với các phương thức HTTP này.
Ngoài ra, Laravel còn cho phép bạn đăng ký các Route tương ứng với nhiều phương thức HTTP bằng cách sử dụng phương thức "match". Ví dụ, để đăng ký một Route tương ứng với các phương thức GET và POST đến URI "/user" và gọi hàm "index" trong Controller "UserController", bạn có thể sử dụng mã như sau:
Route::match(['get', 'post'], '/user', 'UserController@index');
Hoặc, nếu bạn muốn đăng ký một Route tương ứng với tất cả các phương thức HTTP, bạn có thể sử dụng phương thức "any".
Ví dụ:Route::any('/user', 'UserController@index');
4. Route Parameter
Để định nghĩa một Route với Route Parameter, bạn chỉ cần đặt một dấu hai chấm (:) trước tên của tham số. Ví dụ, để đăng ký một Route GET đến URI "/user/{id}" và gọi hàm "show" trong Controller "UserController", bạn có thể sử dụng mã như sau:
Route::get('/user/{id}', 'UserController@show');
Trong hàm xử lý "show", bạn có thể truy cập giá trị của Route Parameter bằng cách sử dụng tham số của hàm. Ví dụ:
public function show($id) { return "User ID: " . $id; }
5. Route Name
Route name là một cách để đặt tên(định danh) cho một Route. Nó giúp bạn xác định các Route một cách dễ dàng và tránh phải sử dụng đường dẫn cụ thể trong mã nguồn.
Để đặt tên cho một Route, bạn chỉ cần sử dụng phương thức "name" sau khi đăng ký Route.
Ví dụ:Route::get('/user/{id}', 'UserController@show')->name('user.show');
Sau đó, bạn có thể sử dụng tên của Route này để tạo các liên kết đến Route đó trong ứng dụng của mình. Ví dụ:
<a href="{{ route('user.show', 1) }}"> User Profile </a>
Trong ví dụ trên, hàm "route" được sử dụng để tạo một liên kết đến Route có tên "user.show" với giá trị tham số là "id=1".
6. Route Group
Route Group là một cách để nhóm các Route có chung các thuộc tính như tiền tố URI, middleware, middleware nhóm, đặt tên Route, v.v.
Để đăng ký một Route Group, bạn có thể sử dụng phương thức "group" của Route. Ví dụ, để đăng ký một Route Group có tiền tố URI "/admin" và middleware "auth", bạn có thể sử dụng mã như sau:
Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function () { Route::get('/dashboard', 'AdminController@dashboard')->name('admin.dashboard'); Route::get('/users', 'AdminController@users')->name('admin.users'); Route::get('/settings', 'AdminController@settings')->name('admin.settings'); });
Trong ví dụ trên, các Route trong Route Group được đăng ký với tiền tố URI "/admin" và middleware "auth". Ngoài ra, mỗi Route được đặt tên để dễ dàng truy cập từ các phương thức khác trong ứng dụng của bạn.
7. Route Resource
Route resource là một cách để đăng ký các Route cho các tài nguyên trong ứng dụng của bạn, chẳng hạn như bài viết, sản phẩm, người dùng, v.v. Route resource thường được dùng để viết các API cho ứng dụng của bạn. Khi khai báo một route resource nó sẽ động động sinh ra cho bạn các phương thức như Get, Post, Delete tương ứng với các action trong controller.
Để đăng ký các Route resource, bạn có thể sử dụng phương thức "resource" của Route. Ví dụ, để đăng ký các Route Resource cho tài nguyên "post" và gọi hàm xử lý tương ứng trong Controller "PostController", bạn có thể sử dụng mã như sau:
Route::resource('post', 'PostController');
Sau đó, Laravel sẽ tự động đăng ký các Route cho các phương thức HTTP như sau:
Method URI Action GET /post index GET /post/create create POST /post store GET /post/{post} show PUT/PATCH /post/{post} update DELETE /post/{post} destroy Ngoài ra, bạn cũng có thể chỉ định các phương thức HTTP mà bạn muốn đăng ký bằng cách sử dụng phương thức "only" hoặc "except". Ví dụ, để đăng ký các Route chỉ cho phương thức index và show, bạn có thể sử dụng mã như sau:
Route::resource('post', 'PostController', ['only' => ['index', 'show']]);
Hoặc để đăng ký tất cả các phương thức trừ phương thức create và edit, bạn có thể sử dụng mã như sau:
Route::resource('post', 'PostController', ['except' => ['create', 'edit']]);
8. Route Model Binding
Route Model Binding là một tính năng mạnh mẽ của Laravel cho phép bạn tự động ánh xạ các giá trị đường dẫn đến các Model trong ứng dụng của bạn.
Ví dụ, để đăng ký một Route cho việc hiển thị thông tin chi tiết của một bài viết dựa trên ID của bài viết, bạn có thể sử dụng mã như sau:
Route::get('/post/{post}', 'PostController@show');
Tuy nhiên, để sử dụng Route Model Binding, bạn chỉ cần đặt tên tham số của Route trùng với tên của thuộc tính ID của Model tương ứng trong Laravel. Ví dụ, nếu thuộc tính ID của Model Post là "id", bạn có thể sử dụng mã như sau:Route::get('/post/{id}', 'PostController@show');
Sau đó, Laravel sẽ tự động tìm kiếm bài viết có ID tương ứng và chuyển đến phương thức "show" trong Controller "PostController".
Ngoài ra, bạn cũng có thể sử dụng các tùy chọn trong Route Model Binding để ánh xạ các giá trị đường dẫn đến các Model khác nhau trong ứng dụng của bạn. Ví dụ, để ánh xạ các giá trị đường dẫn đến Model User thay vì Model Post, bạn có thể sử dụng mã như sau:
Route::get('/user/{user}', 'UserController@show')->where('user', '[0-9]+');
Trong ví dụ trên, tùy chọn "where" được sử dụng để chỉ định rằng tham số "user" của Route phải là một số nguyên. Sau đó, Laravel sẽ tự động tìm kiếm User có ID tương ứng và chuyển đến phương thức "show" trong Controller "UserController".
9. Kết luận
Trong bài viết này, chúng ta đã tìm hiểu về Route trong Laravel và các tính năng quan trọng của nó như Route parameters, Route group, Route Prefixes, Route Name, Middleware, Route Model Binding và Resource Controllers. Với sự linh hoạt, tiện lợi và mạnh mẽ của Route trong laravel giúp cho việc quản lý đường dẫn(URI) trở nên dễ dàng hơn bao giờ hết.
Việc sử dụng Route đúng cách sẽ giúp cho ứng dụng của bạn trở nên đơn giản hơn, dễ bảo trì và mở rộng. Ngoài ra, Route cũng cung cấp cho bạn các tính năng quan trọng như xác thực, phân quyền và bảo mật cho ứng dụng của bạn.
Cuối cùng, việc hiểu và sử dụng Route đúng cách sẽ giúp cho quá trình thiết kế website của bạn trở nên nhanh chóng, chuyên nghiệp hơn và đáp ứng được yêu cầu của người dùng một cách tốt nhất.
Bạn có thể tham khảo thêm các bài viết liên quan về laravel tại đây: -