创建中间件需通过Artisan命令生成,如php artisan make:middleware CheckAge,随后在handle方法中编写逻辑,例如检查年龄并重定向,接着在Kernel.php中注册为全局或路由中间件,最后在路由或控制器中使用;中间件执行顺序按注册和调用顺序进行,前置中间件先入后出,后置则相反;可在handle中修改$request数据或通过$response修改响应内容,并用try-catch处理异常,结合Laravel全局异常处理机制统一管理错误。

创建自定义中间件是为了在请求到达你的 Laravel 应用之前或之后,对请求进行预处理或后处理。简单来说,它就像一个请求的“守门人”,可以检查权限、修改请求数据、记录日志等等。
解决方案:
生成中间件:
使用 Artisan 命令生成中间件类:
php artisan make:middleware CheckAge
这会在
app/Http/Middleware
CheckAge.php
编写中间件逻辑:
打开
CheckAge.php
handle
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
if ($request->age < 18) {
return redirect('home'); // 年龄小于18岁,重定向到首页
}
return $next($request); // 年龄符合要求,继续处理请求
}
}$request
$next
注册中间件:
你需要在
app/Http/Kernel.php
全局中间件: 所有请求都会经过这些中间件。添加到
$middleware
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\CheckAge::class, // 注册全局中间件
];路由中间件: 只对特定的路由生效。添加到
$routeMiddleware
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'age' => \App\Http\Middleware\CheckAge::class, // 注册路由中间件,别名为 'age'
];使用中间件:
全局中间件: 注册后自动生效,无需额外操作。
路由中间件: 在路由定义中使用
middleware
Route::get('/profile', function () {
// 只有通过 CheckAge 中间件才能访问
})->middleware('age');也可以在控制器中使用构造函数来应用中间件:
public function __construct()
{
$this->middleware('age');
}Laravel 中间件的执行顺序是怎样的?
Laravel 中间件的执行顺序取决于它们在
app/Http/Kernel.php
$middleware
如何修改请求或响应数据?
在中间件的
handle
$request
$next($request)
public function handle(Request $request, Closure $next)
{
// 修改请求数据
$request->merge(['new_parameter' => 'new_value']);
// 获取响应对象
$response = $next($request);
// 修改响应头
$response->header('X-Custom-Header', 'Custom Value');
return $response;
}中间件中如何处理异常?
在中间件中捕获异常并进行处理是常见的做法。你可以使用
try-catch
public function handle(Request $request, Closure $next)
{
try {
return $next($request);
} catch (\Exception $e) {
// 记录日志
\Log::error($e);
// 返回错误响应
return response()->json(['error' => 'An error occurred'], 500);
}
}此外,你还可以使用 Laravel 的异常处理机制,在
app/Exceptions/Handler.php
以上就是Laravel如何创建自定义中间件_自定义请求处理逻辑的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号