Home > Article > PHP Framework > Understanding the middleware of ThinkPHP6
As the complexity of modern web applications continues to increase, code logic is becoming more and more complex. To solve this problem, middleware is becoming more and more popular in modern web development. ThinkPHP6 is a popular PHP framework that also supports middleware. In this article, we will discuss the basics and practical uses of ThinkPHP6 middleware.
In web development, middleware refers to a way of processing HTTP requests and responses. When the client sends a request to the server, the HTTP request passes through multiple middlewares and finally returns a response to the client.
Middleware can operate on requests before the request reaches the target controller or action, and can also operate on the response before the response leaves the target controller or action. This approach allows us to add additional functionality without modifying the application logic.
In ThinkPHP6, middleware can be used globally or as needed. All middleware is stored in the app/middleware directory.
Basic structure of middleware:
<?php declare (strict_types=1); namespace appmiddleware; use thinkRequest; use thinkResponse; class SampleMiddleware { public function handle(Request $request, Closure $next): Response { // do something before the controller action $response = $next($request); // do something after the controller action return $response; } }
This code demonstrates the simplest middleware, in which the handle method is required. It receives a Request object and a closure $next. Within the closure, the next middleware or target controller or action method is called, and finally the response is returned. We can add our own logic before and after the $next call.
Configuration middleware:
// 全局中间件 return [ // 使用定义的中间件类名称或闭包 ppmiddlewareSampleMiddleware::class, ];
// 路由中间件 return [ // 定义中间件名称和对应中间件类名称或闭包 'auth' => ppmiddlewareAuth::class, // 为指定路由添加中间件 'admin' => ['auth', 'log'], ];
Below, we will use a simple example to illustrate how to use middleware in ThinkPHP6.
Suppose we are developing a web application where we need to record the response time of each route. Adding this functionality in a web framework means we need to add code in every controller method. Using middleware can extract this code from the controller method, simplify the code and improve maintainability.
<?php declare (strict_types=1); namespace appmiddleware; use thinkRequest; use thinkResponse; class CustomMiddleware { public function handle(Request $request, Closure $next): Response { $startTime = microtime(true); $response = $next($request); $endTime = microtime(true); $response->header('X-Response-Time', $endTime - $startTime); return $response; } }
This middleware will record the start time and end time of each request and add the response time to the response header.
In the app/middleware.php file, add CustomMiddleware to the global middleware or routing middleware.
// 全局中间件 return [ ppmiddlewareCustomMiddleware::class, ];
Or add middleware for the specified route in the route definition.
use appmiddlewareCustomMiddleware; Route::get('hello/:name', 'index/hello')->middleware(CustomMiddleware::class);
Now we have successfully added a new middleware to the application. Every time a request is made, CustomMiddleware captures the request time and response time and adds the response time to the response header.
Middleware is a very useful tool in web development that can help us divide our code into smaller, more focused components. In ThinkPHP6, middleware is a powerful feature that can help us simplify the code and improve maintainability. I hope this article can help you understand the idea of ThinkPHP6 middleware and its practical application.
The above is the detailed content of Understanding the middleware of ThinkPHP6. For more information, please follow other related articles on the PHP Chinese website!