MIDDLEWARE LARAVEL LÀ GÌ

     
Middleware hỗ trợ một cơ chế dễ dàng để lọc các HTTP Request vào áp dụng của bạn. Ví dụ: Laravel gồm 1 Middleware xác minh người dùng truy cập vào áp dụng của bạn. Nếu người tiêu dùng không được xác thực, Middleware sẽ chuyến hướng người dùng đến màn hình hiển thị đăng nhập. Ngược lại, nếu người tiêu dùng được xác thực, Middleware sẽ cho phép Request liên tiếp vào ứng dụng
Middleware có thể được viết để tiến hành thêm những nhiệm vụ khác sát bên việc xác thực. Middleware CORS phụ trách thêm các tiêu đề thích hợp cho tất các response rời khỏi áp dụng của bạn. Middleware log có thể thục hiện ghi log cho toàn bộ các request tới ứng dụng
Vài middleware đã bao gồm sẵn vào Laravel framework, bao hàm middleware đến bảo trì, xác thực, phòng phòng CSRF cùng còn nữa. Toàn bộ những middleware này bên trong thư mục app/Http/Middlware.

Bạn đang xem: Middleware laravel là gì


Để chế tác một middleware mới, các bạn hãy áp dụng câu lệnh Artisan: make:middleware php artisan make:middleware CheckAge
Lệnh này sẽ khởi tạo một class CheckAge trong thư mục app/Http/Middleware... Vào middleware này, bọn họ sẽ chỉ chất nhận được truy cập vào route nếu cực hiếm age to hơn 200. Nếu như không, bọn họ sẽ chuyển hướng người tiêu dùng quay lại "home" URL.

<?phpnamespace AppHttpMiddleware;use Closure;class CheckAge /** * Handle an incoming request. * *
return mixed */ public function handle($request, Closure $next) if ($request->age <= 200) return redirect("home"); return $next($request);
Như các bạn đã thấy, nếu cực hiếm age đã cho nhỏ hơn hoặc bởi 200, middleware vẫn trả lại một HTTP chuyển hướng đến client; ngược lại, request sẽ tiến hành gửi tiếp để xử lý. Để truyền request vào sâu hơn trong ứng dụng (cho phép middleware "vượt qua"), solo giản chỉ việc gọi callback $next với $request. Tốt nhất là hãy hình dung middleware là 1 trong chuỗi những "layers" trên HTTP request rất cần được đi qua trước khi đi vào trong chương trình. Mỗi layer sẽ thực hiện kiểm tra request và thậm chí có thể huỷ khước từ request trả toàn.

Xem thêm: Nghệ Thuật Tặng Quà Sinh Nhật Cho Nam 17 Tuổi, Top 10+ Món Quà Sinh Nhật Cho Nam 17 Tuổi Ý Nghĩa


Việc một middleware chạy trước giỏi sau một request phụ thuộc vào chủ yếu middleware nó. Ví dụ, middleware dưới đây sẽ tiến hành vài tác vụ trước lúc request được chương trình xử lý:
<?phpnamespace AppHttpMiddleware;use Closure;class BeforeMiddleware public function handle($request, Closure $next) // Perform kích hoạt return $next($request);
<?phpnamespace AppHttpMiddleware;use Closure;class AfterMiddleware public function handle($request, Closure $next) $response = $next($request); // Perform kích hoạt return $response;
Nếu bạn muốn một middleware chạy trong những HTTP Request đến áp dụng của bạn, 1-1 giản chỉ cần thêm thương hiệu class của middleware kia vào trong trực thuộc tính $middleware của class app/Http/Kernel.php.
Nếu bạn muốn gán middleware cho các route cố gắng thể, trước tiên bạn cần phải thêm middleware vào trong biến đổi $routeMiddleware trong tệp tin app/Http/Kernel.php cùng đặt mang đến nó một key:
// Within AppHttpKernel Class...protected $routeMiddleware = < "auth" => AppHttpMiddlewareAuthenticate::class, "auth.basic" => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class, "bindings" => IlluminateRoutingMiddlewareSubstituteBindings::class, "cache.headers" => IlluminateHttpMiddlewareSetCacheHeaders::class, "can" => IlluminateAuthMiddlewareAuthorize::class, "guest" => AppHttpMiddlewareRedirectIfAuthenticated::class, "signed" => IlluminateRoutingMiddlewareValidateSignature::class, "throttle" => IlluminateRoutingMiddlewareThrottleRequests::class, "verified" => IlluminateAuthMiddlewareEnsureEmailIsVerified::class,>;
Sau khi đã có khai báo trong HTTP Kernel, chúng ta có thể sử dụng khoá middleware để tùy chỉnh cấu hình thông số thiết lập vào trong route:
use AppHttpMiddlewareCheckAge;Route::get("admin/profile", function () //)->middleware(CheckAge::class);
Đôi khi bạn có nhu cầu nhóm một số trong những middleware bởi một khóa tốt nhất để hoàn toàn có thể gán vào route dễ dàng hơn. Bạn có thể làm điều này bằng phương pháp sử dụng$middlewareGroupscủa HTTP kernel.

Xem thêm: 8 Cách Nấu Cháo Hạt Sen Nấu Cháo Cho Bé 1 Tuổi, Cháo Hạt Sen Cho Bé Ăn Dặm


Về cơ bản, Laravel cung cấp sẵn hai nhóm middleware thường áp dụng mà chúng ta có thể muốn áp dụng cho website UI tuyệt API:
var array */protected $middlewareGroups = < "web" => < AppHttpMiddlewareEncryptCookies::class, IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class, IlluminateSessionMiddlewareStartSession::class, IlluminateViewMiddlewareShareErrorsFromSession::class, AppHttpMiddlewareVerifyCsrfToken::class, IlluminateRoutingMiddlewareSubstituteBindings::class, >, "api" => < "throttle:60,1", "auth:api", >,>;
Các đội middleware rất có thể gán cho các route cùng controller action sử dụng cú pháp tựa như như cùng với từng middleware riêng. Việc sử dụng nhóm middleware sẽ làm cho việc gán những middleware vào trong một route trở nên tiện hơn:
Route::get("/", function () //)->middleware("web");Route::group(<"middleware" => <"web">>, function () //);

*
Chú ý: Nhóm middleware website được auto áp dụng vào trong file routes.php qua RouteServiceProvider
Đôi khi, bạn cần middleware của mình để thực hiện theo một thứ tự rõ ràng nhưng không có quyền kiểm soát điều hành thứ trường đoản cú của bọn chúng khi chúng được gán cho route. Trong trường hòa hợp này, chúng ta cũng có thể chỉ định cường độ ưu tiên của middleware bằng phương pháp sử dụng $middlewarePriority làm việc trong: app/Http/Kernel.php:
/** * The priority-sorted các mục of middleware. * * This forces non-global middleware to lớn always be in the given order. * *
var array */protected $middlewarePriority = < IlluminateSessionMiddlewareStartSession::class, IlluminateViewMiddlewareShareErrorsFromSession::class, AppHttpMiddlewareAuthenticate::class, IlluminateSessionMiddlewareAuthenticateSession::class, IlluminateRoutingMiddlewareSubstituteBindings::class, IlluminateAuthMiddlewareAuthorize::class,>;
Middleware cũng có thể nhận các tham số truyền vào. Ví dụ, nếu lịch trình cần xác thực user vẫn được bảo đảm có "role" ví dụ trước khi tiến hành một làm việc nào đó, bạn có thể tạo ra CheckRole để dấn tên của role như 1 tham số.
<?phpnamespace AppHttpMiddleware;use Closure;class CheckRole{ /** * Handle the incoming request. * *