Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 5: Route trong Laravel 8 (phần 3)

Tiếp tục với route trong Laravel 8, phần này mình sẽ giới thiệu đến mọi người 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 sting, array chứa middleware name.

VD: Thêm middleware auth cho request /user/profile.

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

Còn việc tạo middleware ra sau thì mình sẽ nói ở bài sau nhé! :D

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 handle.

VD:

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

Lưu ý: Để 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.

VD: Auto resolve User theo route.

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 enable 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.

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

VD: csrf_token().

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

VD: csrf_field().

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

VD:

<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 feature 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:

php artisan 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ể run 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

VD:

>> php artisan route:list

+--------+----------+-------------------------------+--------------+---------+------------+
| Domain | Method   | URI                           | Name         | Action  | Middleware |
+--------+----------+-------------------------------+--------------+---------+------------+
|        | GET|HEAD | /                             | home         | Closure | web        |
|        | GET|HEAD | user/{id}/comment/{commentId} | user.comment | 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. Default 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 set name thì nó sẽ trả về null.
  • Route::currentRouteAction() - Lấy ra current action của route. Cái này chỉ work nếu bạn sử dụng Controller làm action cho route.

8. Lời kết.

Về route trong Laravel chúng ta tạm tìm hiểu đến đây thôi nhé, phần sau chúng ta sẽ tìm hiểu về request trong Laravel.

 
Đă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!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

0 Comments

Bài viết chưa có ai bình luận, hãy là người đầu tiên đi bạn!

Bình luận

Captcha