Laravel cơ bản
Laravel nâng cao
Quảng cáo

Route trong Laravel (Cuối)

Trong hướng dẫn này các bạn tiếp tục với route trong Laravel, phần này sẽ giới thiệu đến các bạn về middleware route, csrf_token,...

1. Middleware Route.

Middleware là một khái niệm chỉ việc cung cấp ra các bộ filter HTTP request cho ứng dụng. Ví dụ như khi người dùng tạo một POST request đến path /user/create thì sẽ loại bỏ các khoảng trống trong dữ liệu gửi lên.

Để thêm middleware cho một route các bạn sử dụng phương thức middleware() với cú pháp:

middleware($middleware)

Trong đó: $middleware là một string, array chứa tên middleware.

Ví dụ thêm middleware auth cho request /user/profile.

Ví dụ

Route::middleware(['auth'])->group(function () {
    Route::get('/user/profile', function () {
        //
    });
});

Ghi chú: Việc tạo middleware chúng ta sẽ nghiên cứu ở phần sau

2. Subdomain Route.

Trong một số trường hợp bạn muốn sử dụng route cho subdomain thì bạn sử dụng phương thức domain với cú pháp như sau:

domain($domain)

Trong đó: $domain là domain của bạn muốn xử lý.

Ví dụ

Route::domain('{account}.example.com')->group(function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});

Ghi chú: Để route subdomain hoạt động thì bạn phải thiết lập subdomain trên webserver trước đã.

3. Binding Model Trong Route.

Laravel tự động resolve eloquent model nếu như bạn định nghĩa chúng trong route hoặc phương thức trong controller.

Ví dụ về Auto resolve User theo route.

Ví dụ

use App\Models\User;

Route::get('/users/{user}', function (User $user) {
    return $user->email;
});

Lúc này khi bạn truyền {user} thì laravel sẽ resolve model với {user} tương ứng với primary key trong model và nó sẽ trả về 404 nếu {user} không có trong database.

4. CSRF token trong Route.

Mặc định route trong Laravel được kích hoạt middlewareVerifyCsrfToken (app/Http/Middleware/VerifyCsrfToken.php) chính vì thế tất cả các request khác HEAD, GET và OPTIONS đều cần phải có token kèm theo. Nếu không có token kèm theo thì Laravel sẽ trả về http status code là 419.

Laravel cho phép các bạn binding token vào request qua một trong các cách thức sau:

  • Truyền vào trong http header với header name là X-XSRF-TOKEN.
  • Truyền vào trong parameter string với name là _token.

Để tạo ra CSRF token trong Laravel các bạn sử dụng hàm csrf_token(). Nếu như bạn cần tạo ra html input token thì bạn có thể sự dụng hàm csrf_field().

Cách sử dụng csrf_token().

Ví dụ

<form action="/example" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

Cách sử dụng csrf_field().

Ví dụ

csrf_field();

// Output: <input type="hidden" name="_token" value="jtjDHciPJs0riuoHAEHGYNkxdF1DARv5xo9oVOg2">

Ngoài ra bạn có thể sử dụng blade directive để sinh ra token_field() với directive @csrf

Ví dụ

<form action="/example" method="POST">
    @csrf
</form>

5. Route Cache.

Laravel xử lí route cũng tương đối là nặng và cồng kềnh thế nên laravel có cung cấp một tính năng cho phép chúng ta cache lại thông tin route vào một file. File này sẽ nằm ở trong bootstrap/cache/

Để cache route các bạn sử dụng command:

phpartisan route:cache

Khi route đã được cache, laravel sẽ load data trong file cache ra mà không quan tâm đến file route nữa. Chính vì thế bạn có sửa gì trong route laravel cũng không nhận nữa. Để apply lại route mới bạn có thể chạy lại lệnh cache một lần nữa. Hoặc clear route cache rồi cache lại.

Để clear route cache trong Laravel các bạn sử dụng lệnh:

php artisan route:clear

6. Hiển thị danh sách route.

Để hiển thị ra danh sách route đã được đăng kí trong Laravel các bạn sử dụng câu lệnh:

php artisan route:list

Ví dụ

# php artisan route:list
+--------+----------+------------------+------+---------+------------+
| Domain | Method   | URI              | Name | Action  | Middleware |
+--------+----------+------------------+------+---------+------------+
|        | GET|HEAD | /                |      | Closure | web        |
|        | GET|HEAD | api/user         |      | Closure | api        |
|        |          |                  |      |         | auth:api   |
|        | GET|HEAD | blog/{id}/{slug} |      | Closure | web        |
+--------+----------+------------------+------+---------+------------+

Ngoài ra bạn có thể thêm các option khác như:

--columns=[Column] chọn các cột hiển thị.
--compact chỉ hiển thị cột method, URI và Action.
--json xuất data dưới dạng json.
--method=[Method] lọc các route theo method.
--name[=NAME] lọc theo route name.
--path[=PATH] lọc theo path.
--reverse đảo ngược thứ tự sắp xếp route.
--sort[=SORT] sắp xếp route theo column. Mặc định là sắp xếp theo URI.

7. Lấy route hiện tại.

Trong một số trường hợp bạn cần lấy ra thông tin của route hiện tại thì Laravel route có cung cấp cho chúng ta 3 phương thức để lấy ra thông tin.

  • Route::current() - Lấy ra current route dạng object (Illuminate\Routing\Route).
  • Route::currentRouteName() - Lấy ra current route name. Nếu route không đặt giá trị name thì nó sẽ trả về null.
  • Route::currentRouteAction() - Lấy ra current action của route. Cái này chỉ hoạt động nếu bạn sử dụng Controller làm action cho route.

Bài viết này đã giúp ích cho bạn?

Advertisements