07. tháng 6 2025
Đây là một khái niệm được sử dụng trong các phiên bản Laravel 4.x và 5.0.
Route filters cung cấp một cách tiện lợi để hạn chế quyền truy cập vào một route cụ thể, điều này rất hữu ích khi tạo ra những khu vực trên trang web yêu cầu xác thực người dùng.
Theo tài liệu Laravel 6, middleware chính là sự thay thế nâng cấp cho filter từ phiên bản 4.x.
Middleware cung cấp một cơ chế thuận tiện để lọc các yêu cầu HTTP trước khi chúng vào ứng dụng của bạn. Tất cả các middleware bắn cá miễn phí này đều nằm trong thư mục app/Http/Middleware.
1php artisan make:middleware CheckAge
2namespace App\Http\Middleware;
3use Closure;
4class CheckAge
5{
6 public function handle($request, Closure $next)
7 {
8 if ($request->age <= 200) {
9 return redirect('home');
10 }
11 return $next($request);
12 }
13}
1// Định nghĩa trong [789bet dang nhap](/blog/redmi-k80/) tệp app/filters.php
2Route::filter('old', function()
3{
4 if (Input::get('age') < 200)
5 {
6 return Redirect::to('home');
7 }
8});
9// Sử dụng trong route
10Route::get('user', array('before' => 'old', 'uses' => 'UserController@showProfile'));
Trong filter, việc xác định logic chạy trước hay sau request được chỉ định bằng từ khóa before
hoặc after
trong route. Trong khi đó, middleware quyết định điều này thông qua vị trí chèn mã lệnh trong hàm handle
.
1// Trước: Thực hiện hành động
2$response = $next($request);
3
4// Sau: Thực hiện hành động
5return $response;
Trước tiên, cần đăng ký middleware trong file app/Http/Kernel.php
, ví dụ:
1protected $routeMiddleware = [
2 'auth' => \App\Http\Middleware\Authenticate::class,
3 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
4];
Sau đó, chỉnh sửa file route:
1Route::get('admin/profile', function () {
2 //
3})->middleware('auth'); // Nếu có nhiều middleware: middleware('first', 'second');
web
và api
là hai nhóm middleware, cũng được định nghĩa trong file Kernel.php
.
Trong quá trình nâng cấp từ Laravel 5.0 lên 5.2, có đoạn mô tả như sau:
Hãy sao chép logic của bộ lọc từ file
app/filters.php
vào phương thứcboot()
củaapp/Providers/RouteServiceProvider.php
. Thêm dònguse Illuminate\Support\Facades\Route;
vào file RouteServiceProvider để tiếp tục sử dụng facade Route. Những nơi sử dụng bộ lọc mặc định cũ (ví dụ, ['before' => 'auth']) cần được thay thế bằng middleware mới (ví dụ, ['middleware' => 'auth']).
Khi xem xét file RouteServiceProvider.php trong Laravel 6, dường như không cần phải thực hiện bất kỳ thay đổi nào.