本文目录导读:

在ThinkPHP框架中,中间件的执行顺序遵循先注册先执行的原则,即先进先出(FIFO),下面是详细的执行顺序说明:
全局中间件执行顺序
全局中间件(app/middleware.php)
// app/middleware.php
return [
// 按数组顺序执行
\app\middleware\CheckToken::class, // 第1个执行
\app\middleware\CheckPermission::class, // 第2个执行
\app\middleware\Log::class, // 第3个执行
];
执行流程:
请求 → CheckToken → CheckPermission → Log → 控制器 → 响应
← Log ← CheckPermission ← CheckToken ← 响应
应用中间件(应用下的middleware.php)
// app/admin/middleware.php
return [
\app\middleware\Auth::class,
];
路由中间件
Route::group('admin', function() {
Route::get('list', 'User/list')->middleware([
\app\middleware\CheckAuth::class,
\app\middleware\CheckLogin::class
]);
});
控制器中间件
class User extends BaseController
{
protected $middleware = [
'checkLogin' => ['only' => ['index', 'edit']],
'checkPermission' => ['except' => ['login']],
];
}
完整执行顺序总结
全局中间件 → 应用中间件 → 路由分组中间件 → 路由中间件 → 控制器中间件 → 控制器方法
中间件嵌套执行顺序
// 定义多个中间件
return [
'A' => \app\middleware\AMiddleware::class,
'B' => \app\middleware\BMiddleware::class,
'C' => \app\middleware\CMiddleware::class,
];
// 注册顺序
[
'A',
'B',
'C'
]
执行流程:
请求 → A中间件(入口) → B中间件(入口) → C中间件(入口) → 控制器
↓ ↓ ↓
响应 ← A中间件(出口) ← B中间件(出口) ← C中间件(出口) ← 响应
中间件实现示例
<?php
namespace app\middleware;
class TestMiddleware
{
public function handle($request, \Closure $next)
{
// 前置操作(在下一个中间件或控制器之前执行)
echo '中间件入口<br>';
// 执行下一个中间件或控制器
$response = $next($request);
// 后置操作(在响应返回之前执行)
echo '中间件出口<br>';
return $response;
}
}
优先级说明
- 全局中间件 > 应用中间件 > 路由中间件 > 控制器中间件
- 同一层级的中间件按定义顺序执行
- 多个中间件形成嵌套结构,类似洋葱模型
配置优先级
// 不同的配置方式优先级 1. 全局配置文件(最低) 2. 应用配置(居中) 3. 路由配置(较高) 4. 控制器属性(最高)
如果要控制某个中间件的执行优先级,可以通过注册顺序或使用优先级参数来调整。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播