Middleware Trong Laravel 8
Có thể bạn quan tâm
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Ệ
Gợi ý
- Học PHP
- Python
- Node.js
- javascript
- MongoDB
By Vũ Thanh Tài
Ở 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 MiddlewareNameTrong đó: 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 EnsureTokenIsValidLú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
About author
The best way to learn is to share Xem tất cả bài đăngBà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
7 tháng trước 0 Comment -
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
5 năm trước 4 Comments -
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
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.comHã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
-
Tìm Hiểu Về Middleware Trong Laravel - Viblo
-
Middleware Trong Laravel - Viblo
-
Middleware Là Gì? Tìm Hiểu Về Middleware Và Tự Tạo Middleware
-
Bài 14: Middleware Trong Laravel - Học Lập Trình Laravel - VnCoder
-
Middleware | Laravel | Hướng Dẫn Học | Học Web Chuẩn
-
Middleware Trong Laravel 8
-
Middleware Trong Laravel - Tìm Hiểu Qua Ví Dụ Thực Tế
-
Middleware Trong Laravel - Quách Quỳnh
-
Middleware Là Gì? Tại Sao Phải Sử Dụng Nó? - Học Laravel
-
Middleware Trong Laravel - Blog Văn Long
-
Middleware Trong Laravel - W3seokiến Thức Cơ Bản Trong Laravel
-
Cách Tạo Middleware Trong Laravel 7 - SonWeb
-
Bài 6: Tìm Hiểu Về Middleware Trong Laravel
-
Laravel Cơ Bản đến Nâng Cao Phần 2 : Middleware Laravel