Tiếp tục với series, phần này mình sẽ giới thiệu với mọi người về route trong Laravel.
1. Routing là gì?
Routing trong Larvel cũng như các framework khác, đều có chức năng là định tuyến ra các action cho các sự kiện tương ứng. Ví dụ như khi truy cập vào path welcome
thì sẽ xử lí hành động nào, action nào hoặc là khi run command abc sẽ thực thi hành động xyz.
Trong Laravel hỗ trợ chúng ta 3 loại route chính đó là:
- Route dành cho web.
- Route dành cho cli (commnad).
- Route dành cho broadcast.
Có vẻ hơi khó hiểu đúng không? Mình sẽ giới thiệu và ví dụ từng phần cho các bạn dễ hiểu.
2. Sử dụng route cho web.
Mặc định để khai báo các route dành cho web thì các bạn khai báo trong hai file routes/web.php
hoặc routes/api.php
. Trong đó, nếu bạn khai báo route trong routes/api.php
thì các path sẽ được thêm tiền tố api ở phía trước.
Ngoài ra nếu như các bạn muốn khai báo route trong file khác thì bạn cần khai báo file đó app/Providers/RouteServiceProvider.php
.
Route trong Laravel hỗ trợ chúng ta định nghĩa cho tất cả các HTTP request method như:
Route::get($uri, $callback)
- nhận resquest với phương thứcGET
.Route::post($uri, $callback)
- nhận resquest với phương thứcPOST
.Route::put($uri, $callback)
- nhận resquest với phương thứcPUT
.Route::patch($uri, $callback)
- nhận resquest với phương thứcPATCH
.Route::delete($uri, $callback)
- nhận resquest với phương thứcDELETE
.Route::options($uri, $callback)
- nhận resquest với phương thứcOPTIONS
.
Hoặc nếu như bạn muốn đăng kí một route hỗ trợ nhiều method thì bạn có thể dụng phương thức match
theo cú pháp:
Route::match($methods, $uri, $callback)
Hoặc là nhận tất cả các HTTP method với phương thức any
:
Route::any($uri, $callback)
Trong các cú pháp trên:
- $uri
là path mà bạn muốn route xử lí.
- $callback
là một callback, callable hoặc một array chứa thông tin controller và phương thức tác động đến.
- $methods
là một array chứa các phương thức mà bạn muốn route này xử lí.
VD: Khai báo route welcome
sẽ trả về chuỗi "Xin chào" khi truy cập vào path /welcome
.
<?php
// file routes/web.php
use Illuminate\Support\Facades\Route;
Route::get('welcome', function () {
return "Xin chào";
});
Và đây là kết quả:
VD: Khai báo route api/greeting
cũng sẽ trả về chuỗi "Xin chào". Nhưng sẽ đặt trong file routes/api.php
.
<?php
// file routes/api.php
use Illuminate\Support\Facades\Route;
Route::get('greeting', function () {
return "Xin chào";
});
Trong ví dụ trên vì mình đặt trong file routes/api.php
nên path sẽ tự động thêm api
vào trước chính vì thế mình không cần điền api vào nữa.
Nếu như bạn muốn đưa logic vào trong controller thì bạn có thể sửa dụng cú pháp sau:
Route::routeMethod($uri, [$controllerName, $method]);
Trong đó:
routeMethod
là method action của route.$uri
là path mà bạn muốn xử lí.$controllerName
là controller chứa logic.$method
là phương thức trong controller chứa logic để xử lí cho route đó.
VD: Mình sẽ di chuyển logic code của ví dụ trên vào GreetingController
.
- file app/Http/Controllers/GreetingController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class GreetingController extends Controller
{
public function greet()
{
return "Xin chào";
}
}
- file routes/web.php
<?php
use Illuminate\Support\Facades\Route;
Route::get('greeting', [\App\Http\Controllers\GreetingController::class, 'greet']);
Phần controller mình sẽ nói chi tiết sau.
Ngoài ra Laravel cũng hỗ trợ thêm các loại route khác như:
Route redirect
Route::redirect($uri, $redirectTo, $status)
Trong đó:
$uri
là path mà bạn muốn xử lí.$redirectTo
là path mà bạn muốn redirect đến.$status
là http status mà các bạn muốn thiết lập, mặc định$status
là 302
Route view
Route::view($uri, $viewName, $data)
Trong đó:
$uri
là path mà bạn muốn xử lí.$viewName
là view mà bạn muốn render.$data
data mà bạn muốn truyền vào view.- Bạn còn có thể truyền thêm 2 tham số khác vào đó là http status và header.
Chú ý: Route view chỉ work với HTTP request GET
hoặc HEAD
.
Ngoài ra bạn cũng có thể group các route lại để tiện xử lí qua phương thức group.
VD:
use Illuminate\Support\Facades\Route;
Route::prefix('greeting')->group(function () {
// work for: /greeting/vn
Route::get('vn', function () {
return "Xin chào!";
});
// work for: /greeting/en
Route::get('en', function () {
return "Hello!";
});
// work for: /greeting/cn
Route::get('cn', function () {
return "你好!";
});
});
Trong ví dụ trên mình đã group các route có cùng tiền tố greeting
rồi lại khai báo các route bên trong đó.
3. Lời kết.
Laravel hỗ trợ route rất đa dạng nên phần này chúng ta tạm tìm hiểu đến đây thôi. Phần tiếp theo mình sẽ giới thiệu tiếp các khái niệm liên quan đến route trong Laravel 8.
Đăng ký nhận tin.
Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!
Tuân
4 năm trước
Chào Tuân,
Bạn làm theo ví dụ nào ạ? Và lỗi là gì?
Vũ Thanh Tài
4 năm trước
Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in D:\xampp\htdocs\PROJECT\myproject\laravel8\routes\web.php:16 Stack trace: #0 {main} thrown in
Tuân
4 năm trước
Fatal error: Uncaught Error: Class 'Illuminate\Support\Facades\Route' not found in D:\xampp\htdocs\PROJECT\myproject\laravel8\routes\web.php:16 Stack trace: #0 {main} thrown in
Tuân
4 năm trước
Jason
4 năm trước
Sướng
4 năm trước
Thích
3 năm trước
abc
2 năm trước