ThinkPHP6中间件实战:构建灵活可扩展的请求处理管道 | PHP框架高级应用

2025-07-11 0 193

ThinkPHP6中间件实战:构建灵活可扩展的请求处理管道

ThinkPHP6的中间件机制提供了对HTTP请求进行分层处理的能力,本文将深入探讨如何利用中间件实现API鉴权、请求日志等常见功能,并通过完整案例展示其实际应用。

1. 中间件基础创建

创建一个记录请求日志的中间件:

// app/middleware/RequestLog.php
namespace appmiddleware;

class RequestLog
{
public function handle($request, Closure $next)
{
// 前置中间件逻辑
$startTime = microtime(true);

// 记录请求信息
$logData = [
‘method’ => $request->method(),
‘path’ => $request->pathinfo(),
‘ip’ => $request->ip(),
‘time’ => date(‘Y-m-d H:i:s’)
];

// 执行下一个中间件/控制器
$response = $next($request);

// 后置中间件逻辑
$logData[‘duration’] = round(microtime(true) – $startTime, 3);
Log::write(json_encode($logData), ‘request’);

return $response;
}
}

2. 中间件注册与使用

全局中间件和应用中间件的配置方式:

// app/middleware.php
return [
// 全局中间件
appmiddlewareRequestLog::class,

// 别名中间件
‘auth’ => appmiddlewareAuthCheck::class,
];

// 路由中使用
Route::rule(‘user/profile’, ‘user/profile’)
->middleware(appmiddlewareAuthCheck::class);

// 或使用别名
Route::rule(‘admin’, ‘admin/index’)
->middleware(‘auth’);

3. 实际案例:API鉴权中间件

实现一个JWT认证中间件:

// app/middleware/AuthCheck.php
class AuthCheck
{
public function handle($request, Closure $next)
{
$token = $request->header(‘Authorization’);

if (!$token) {
return json([‘code’ => 401, ‘msg’ => ‘Token缺失’]);
}

try {
$payload = JwtUtil::verify($token);
$request->user = UserModel::find($payload->uid);
} catch (Exception $e) {
return json([‘code’ => 403, ‘msg’ => ‘Token无效’]);
}

return $next($request);
}
}

最佳实践: 中间件应保持单一职责,每个中间件只处理一个特定任务。

4. 中间件执行顺序控制

通过中间件优先级控制执行顺序:

// 修改全局中间件定义
return [
// 先执行
appmiddlewareCors::class,

// 后执行
appmiddlewareRequestLog::class => [‘priority’ => 10],
];

ThinkPHP6中间件为应用提供了强大的请求处理管道机制,通过合理设计中间件可以构建出高度可维护和可扩展的应用架构。

ThinkPHP6中间件实战:构建灵活可扩展的请求处理管道 | PHP框架高级应用
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

淘吗网 thinkphp ThinkPHP6中间件实战:构建灵活可扩展的请求处理管道 | PHP框架高级应用 https://www.taomawang.com/server/thinkphp/219.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务