在 Laravel 中创建自定义中间件需执行 php artisan make:middleware 命令生成类,实现 handle 方法处理请求逻辑(如 age 检查),支持参数传递;可全局、路由或控制器中注册,还可选添加 terminate 方法执行响应后清理操作。

在 Laravel 中写自定义中间件非常简单,核心是创建一个类,实现 handle 方法,并在其中处理请求逻辑,再注册到路由或控制器即可。
创建中间件类
Laravel 提供了 Artisan 命令快速生成中间件:
- 运行
php artisan make:middleware CheckAge - 会在
app/Http/Middleware/下生成CheckAge.php
生成的类默认包含 handle 方法,接收 $request、$next 和可选的额外参数。你只需在里面添加业务逻辑,比如判断用户年龄是否达标:
app/Http/Kernel.php
- 全局中间件:加到
$middleware数组(所有请求都执行) - 路由中间件:加到
$routeMiddleware数组,并起个简短别名,例如:
'age' => \App\Http\Middleware\CheckAge::class,
之后就能在路由中这样用:
Route::get('/profile', [ProfileController::class, 'show'])
->middleware('age:21');
注意:冒号后传的值会作为参数传递给 handle 方法。
在控制器中使用中间件
也可以在控制器构造函数或方法中绑定中间件:
public function __construct()
{
$this->middleware('age:18');
}
// 或针对某个方法
public function show(Request $request)
{
$this->middleware('age:16')->only('show');
}
终止中间件(可选)
如果需要在响应发送后执行清理或日志操作,可以添加 terminate 方法:
public function terminate($request, $response)
{
// 记录请求耗时、关闭连接、释放资源等
}
注意:该方法仅在中间件被注册为全局或分组中间件时才会被调用,且不是每次请求都保证执行(Laravel 可能复用响应)。











