php 实现中间件
PHP 实现中间件的步骤
使用闭包实现中间件
闭包是 PHP 中实现中间件的常见方式,通过传递请求和响应对象,可以在处理前后插入逻辑。
$middleware = function ($request, $next) {
// 前置处理逻辑
echo "Before handling request\n";
$response = $next($request);
// 后置处理逻辑
echo "After handling request\n";
return $response;
};
使用类实现中间件
通过类的方式可以更好地组织中间件逻辑,通常需要实现 handle 方法。
class ExampleMiddleware {
public function handle($request, $next) {
// 前置处理逻辑
echo "Before handling request\n";
$response = $next($request);
// 后置处理逻辑
echo "After handling request\n";
return $response;
}
}
中间件管道
中间件管道用于按顺序执行多个中间件,可以通过数组或队列管理中间件。
$middlewares = [
function ($request, $next) {
echo "Middleware 1\n";
return $next($request);
},
function ($request, $next) {
echo "Middleware 2\n";
return $next($request);
}
];
$handler = function ($request) {
echo "Final handler\n";
return "Response";
};
$pipeline = array_reduce(
array_reverse($middlewares),
function ($next, $middleware) {
return function ($request) use ($next, $middleware) {
return $middleware($request, $next);
};
},
$handler
);
$response = $pipeline("Request");
框架中的中间件实现
在 Laravel 等框架中,中间件通常通过 Middleware 类实现,并注册到路由或全局中间件堆栈中。
// 定义中间件
php artisan make:middleware CheckAge
// 注册中间件
protected $routeMiddleware = [
'age' => \App\Http\Middleware\CheckAge::class,
];
// 使用中间件
Route::get('profile', function () {
//
})->middleware('age');
中间件的实际应用
中间件常用于身份验证、日志记录、数据过滤等场景。
class AuthMiddleware {
public function handle($request, $next) {
if (!auth()->check()) {
return redirect('login');
}
return $next($request);
}
}
测试中间件
通过模拟请求和响应对象,可以测试中间件的逻辑是否正确。
public function testMiddleware() {
$request = new Request();
$middleware = new ExampleMiddleware();
$response = $middleware->handle($request, function ($req) {
return new Response();
});
$this->assertInstanceOf(Response::class, $response);
}






