Middleware Trong Laravel 8

Tất cả danh mục
  • PHP
    • PHP CƠ BẢN
    • PHP HƯỚNG ĐỐI TƯỢNG
    • PHP STANDARDS
    • LARAVEL
    • LARAVEL 8
    • PHP&MYSQL
  • PYTHON
    • PYTHON CƠ BẢN
    • PYTHON NÂNG CAO
    • PYTHON & MYSQL
  • JAVASCRIPT
    • JAVASCRIPT CƠ BẢN
    • JQUERY JS
    • VUE.JS
    • ECMASCRIPT
  • NODE.JS
    • NODE.JS CƠ BẢN
    • EXPRESS FRAMEWORK
    • NODE.JS & MYSQL
    • NODE.JS & MONGODB
  • JAVA CORE
  • SQL
  • MONGO DB
  • HTML
  • CSS
  • THỦ THUẬT CÔNG NGHỆ
  • TOOLS & SOFTWARE
  • TIN TỨC & REVIEW
  • TÌM KIẾM
  • TIN TUYỂN DỤNG
  • LIÊN HỆ
Post Job Tìm kiếm

Gợi ý

  • Học PHP
  • Python
  • Node.js
  • javascript
  • MongoDB
Bài 16: Middleware trong Laravel 8

Vũ Thanh Tài By Vũ Thanh Tài

13-01-2021 12 phút đọc Font size

Ở bài route trong Laravel mình cũng có nhắc đến middleware trong Laravel rồi, nhưng chưa nói chi tiết về nó, bài này mình sẽ giới thiệu với mọi người về Middleware trong Laravel 8.

1. Middleware là gì?

Middleware theo wikipedia:

Middleware là phần mềm máy tính với nhiệm vụ kết nối các thành phần phần mềm hoặc các ứng dụng với nhau. Phần mềm loại này bao gồm một tập các dịch vụ cho phép sự tương tác giữa các tiến trình chạy trên một hoặc nhiều máy khác nhau. Công nghệ middleware đã được phát triển để cung cấp khả năng hoạt động tương hỗ, phục vụ cho các kiến trúc phân tán thường được để hỗ trợ và đơn giản hóa các ứng dụng phân tán phức tạp.

Trong Laravel, middleware cung cấp một cơ chế thuận tiện để kiểm tra và lọc các HTTP request đến ứng dụng của bạn.

VD: middleware Authenticate có tác dụng kiểm tra xem người dùng đang thực thi request đã đăng nhập hay chưa? Nếu chưa đăng nhập thì sẽ redirect về trang login và ngược lại đăng nhập rồi thì sẽ cho phép thực hiện request.

Trong Laravel, tất cả các middleware sẽ được đặt trong thư mục app/Http/Middleware.

2. Khai báo middleware.

Để tạo middleware trong Laravel các bạn sử dụng command:

php artisan make:middleware MiddlewareName

Trong đó: MiddlewareName là tên của middleware các bạn muốn tạo.

VD: Mình sẽ tạo một middleware có name là EnsureTokenIsValid.

php artisan make:middleware EnsureTokenIsValid

Lúc này Laravel sẽ sinh ra cho bạn một file middleware nằm trong thư mục app/Http/Middleware với tên file là tên middleware các bạn vừa nhập. Ví dụ đối với VD trên thì file sẽ là app/Http/Middleware/EnsureTokenIsValid.php File sẽ có nội dung như sau:

<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class EnsureTokenIsValid {     /**      * Handle an incoming request.      *      * @param  \Illuminate\Http\Request  $request      * @param  \Closure  $next      * @return mixed      */     public function handle(Request $request, Closure $next)     {         return $next($request);     } }

Trong đó: return $next($request) chính là đoạn code cho phép request tiếp tục được thực thi.

VD: Mình sẽ redirect về URL /home khi request không có token, hoặc token không phải bằng 'toidicode.com'.

<?php namespace App\Http\Middleware; use Closure; class EnsureTokenIsValid {     /**      * Handle an incoming request.      *      * @param  \Illuminate\Http\Request  $request      * @param  \Closure  $next      * @return mixed      */     public function handle($request, Closure $next)     {         if ($request->input('token') !== 'toidicode.com') {             return redirect('home');         }         return $next($request);     } }

Lúc này request các bạn gửi nên nếu không có input token hoặc input token không phải là toidicode.com thì request sẽ được redirect về URL có path /home.

3. Đăng ký middlware.

Để đăng ký middlware vào trong app các bạn khai báo chúng ở trong file app/Http/Kernel.php. Mặc định, Laravel có 3 loại middleware chính là:

  • Global middleware: Các middlware được khai báo trong thuộc tính $middleware là global middleware, các middleware này sẽ được thực thi cho tất cả request.
  • Group middleware: Các middlware được khai báo trong thuộc tính $middlewareGroups sẽ được thực thi khi chúng ta gọi chúng. Mặc định thì Laravel định nghĩa ra 2 group là web và api tương ứng với các route trong web.php và api.php.
  • Route middleware: Các middlware được khai báo trong thuộc tính $routeMiddleware sẽ được thực thi khi chúng ta gọi tên chúng.

VD: Mình sẽ khai báo middleware EnsureTokenIsValid vào trong $routeMiddleware với name là 'validate_token'.

/**  * The application's route middleware.  *  * These middleware may be assigned to groups or used individually.  *  * @var array  */ protected $routeMiddleware = [     //...     //...     'validate_token' => \App\Http\Middleware\EnsureTokenIsValid::class ];

Lúc này nếu route nào cần dùng chỉ cần khai báo middleware là 'validate_token' là được.

VD:

Route::get('/user', function () {     // })->middleware('validate_token');

4. Mức độ ưu tiên middleware.

Thông thường middleware sẽ được thực thi theo thứ tự từ trên xuống. Nhưng nếu bạn muốn thay đổi thứ tự ưu tiên của một middleware nào đó. Bạn có thể thêm vào trong thuộc tính $middlewarePriority trong file app/Http/Kernel.php.

VD:

protected $middlewarePriority = [     \Illuminate\Cookie\Middleware\EncryptCookies::class,     \Illuminate\Session\Middleware\StartSession::class,     \Illuminate\View\Middleware\ShareErrorsFromSession::class,     \Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class,     \Illuminate\Routing\Middleware\ThrottleRequests::class,     \Illuminate\Session\Middleware\AuthenticateSession::class,     \Illuminate\Routing\Middleware\SubstituteBindings::class,     \Illuminate\Auth\Middleware\Authorize::class, ];

Chú ý: $middlewarePriority chỉ work đối với middleware không phải global.

5. Middleware Parameter.

Trong một số trường hợp bạn muốn truyền thêm tham số vào middleware để thực thi các logic cho từng tham số đó. Bạn có thể tham khảo ví dụ sau.

VD: thêm tham số $redirectTo vào middleware EnsureTokenIsValid ở trên.

<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class EnsureTokenIsValid {     /**      * Handle an incoming request.      *      * @param \Illuminate\Http\Request $request      * @param Closure $next      * @param string $redirectTo      * @return mixed      */     public function handle(Request $request, Closure $next, $redirectTo = 'home')     {         if ($request->input('token') !== 'toidicode.com') {             return redirect($redirectTo);         }         return $next($request);     } }

Lúc này khi gọi middleware các bạn có thể truyền thêm tham số vào middleware các bạn sử dụng như sau:

Route::get('/', function () {     return redirect()->back(); })->middleware('validate_token:/login');

Trong đó: đằng sau dấu : sẽ là tham số truyền vào middleware, nếu middleware có nhiều tham số truyền vào bạn có thể sử dụng dấu , để ngăn cách các biến.

6. Lời kết.

Trong Laravel còn một loại middleware nữa, nhưng hiếm khi cần dùng nên mình không nói trong bài viết này. Ai cần có thể xem tại đây.

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

Đăng Ký LARAVEL 8 Bài trước Bài sau 0 comments 539 likes Vũ Thanh Tài

Vũ Thanh Tài

About author
The best way to learn is to share Xem tất cả bài đăng
Bài Viết Mới
  • Bài 40: Xây dựng ứng dụng học toán cho trẻ lớp 1 chỉ trong 45 phút với Amazon Q CLI
    Bài 40: Xây dựng ứng dụng học toán cho trẻ lớp 1 chỉ trong 45 phút với Amazon Q CLI
    7 tháng trước 0 Comment
  • Những tính năng mới trong PHP 8.1
    Những tính năng mới trong PHP 8.1
    4 năm trước 11 Comments
  • Bài 39: Cache trong Laravel 8
    Bài 39: Cache trong Laravel 8
    5 năm trước 4 Comments
  • PHP Swoole là gì? nó có gì mạnh?
    PHP Swoole là gì? nó có gì mạnh?
    5 năm trước 0 Comment

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 Đăng
BÀI VIẾT CÙNG CHUYÊN MỤC
  • Bài 1: Những tính năng mới trong Laravel 8
  • Bài 2: Cài đặt Laravel 8
  • Bài 3: Route trong Laravel 8
  • Bài 4: Route trong Laravel 8 (phần 2)
  • Bài 5: Route trong Laravel 8 (phần 3)
  • Bài 6: View Trong Laravel 8
  • Bài 7: Blade template trong Laravel 8 (phần 1)
  • Bài 8: Blade template trong Laravel 8 (phần 2)
  • Bài 9: Blade template trong Laravel 8 (phần 3)
  • Bài 10: Blade template trong Laravel 8 (phần 4)
  • Bài 11: Blade template trong Laravel 8 (phần 5)
  • Bài 12: Request trong Laravel 8 (phần 1)
  • Bài 13: Request trong Laravel 8 (phần 2)
  • Bài 14: Upload file trong Laravel 8
  • Bài 15: Response trong Laravel 8
  • Bài 16: Middleware trong Laravel 8
  • Bài 17: Controller trong Laravel 8
  • Bài 18: URL trong Laravel 8
  • Bài 19: Session trong Laravel 8
  • Bài 20: Validation trong Laravel 8 (Phần 1)
  • Bài 21: Validation trong Laravel 8 (Phần 2)
  • Bài 22: Xử lý lỗi trong Laravel 8
  • Bài 23: Collection trong Laravel 8
  • Bài 24: Database trong Laravel 8
  • Bài 25: Query Builder trong Laravel 8
  • Bài 26: Pagination trong Laravel 8
  • Bài 27: Migration trong Laravel 8
  • Bài 28: Seeder trong Laravel 8
  • Bài 29: Eloquent Model trong Laravel 8
  • Bài 30: Query với Eloquent ORM trong Laravel 8
  • Bài 31: Query Scope trong Eloquent Model Laravel 8
  • Bài 32: Event trong Eloquent Model Laravel 8
  • Bài 33: Eloquent ORM relationship trong Laravel 8
  • Bài 34: Eloquent ORM relationship trong Laravel 8 (Phần 2)
  • Bài 35: Eloquent ORM relationship trong Laravel 8 (Phần 3)
  • Bài 36: Eloquent ORM collection trong Laravel 8
  • Bài 37: Mutator và Cast trong Laravel Eloquent
  • Bài 38: Eloquent ORM Serialize trong Laravel 8
  • Bài 39: Cache trong Laravel 8
  • Những tính năng mới trong PHP 8.1
Chúng tôi Trên Facebook
Toidicode.com
Hãy tham gia group facebook để cùng giao lưu chia sẻ kiến thức!
Quảng cáo
Đă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!

Thông Báo
Một triết gia đông Lào đã nói:
Không làm mà muốn có ăn thì chỉ có ăn đầu búa, ăn cám.
Mình đã viết blog rồi, thế nên hãy tắt adblock đi để mình có cơm ăn được không? Đéo Ok

Từ khóa » Sử Dụng Middleware Trong Laravel