实施自定义中间件:
Laravel的中间件提供了一种有力的机制,用于过滤HTTP请求输入您的应用程序。创建自定义中间件使您可以将自己的逻辑注入请求生命周期。这是逐步指南:
php artisan make:middleware CheckAge
。这将在app/Http/Middleware/CheckAge.php
中创建一个新的中间件文件。handle
方法中,您将放置自定义逻辑。此方法收到请求( $request
)和关闭( $next
)。闭合代表下一个中间件或路由处理程序。例子:<code class="php"><?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 </code>
app/Http/Kernel.php
中注册新创建的中间件。将其添加到$routeMiddleware
数组:<code class="php">protected $routeMiddleware = [ // ... other middleware ... 'checkage' => \App\Http\Middleware\CheckAge::class, ];</code>
routes/web.php
或routes/api.php
文件中的特定路由或一组路由:<code class="php">Route::get('/profile', [ProfileController::class, 'show'])->middleware('checkage');</code>
实施自定义过滤器(注意:Laravel的术语通常使用“中间件”而不是“过滤器”):
尽管Laravel并没有像某些较旧的框架那样明确使用术语“过滤器”,但中间件有效地具有相同的目的。上面的代码示例通过检查年龄并重定向到未达到条件,证明了类似滤波器的行为。中间件中的handle
方法充当过滤器功能。
handle
方法中创建它们。这可以提高可检验性和可维护性。 Laravel提供了用于身份验证( auth
)和授权( auth.basic
, can
等)的内置中间件。您可以直接使用这些或创建自定义中间件来扩展或自定义身份验证/授权逻辑。
使用内置中间件的示例:
<code class="php">Route::get('/profile', [ProfileController::class, 'show'])->middleware('auth'); //Requires authentication Route::get('/admin', [AdminController::class, 'index'])->middleware('auth', 'admin'); //Requires authentication and admin role (assuming you have an 'admin' middleware defined)</code>
自定义授权中间件的示例:
<code class="php"><?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class CheckAdmin { public function handle(Request $request, Closure $next) { if (Auth::check() && Auth::user()->isAdmin()) { return $next($request); } abort(403, 'Unauthorized'); // Return 403 Forbidden if not an admin } }</code>
请记住在您的app/Http/Kernel.php
文件中注册此CheckAdmin
中间件。
try...catch
块优雅地管理错误。app/Http/Kernel.php
的$routeMiddleware
阵列中正确注册自定义中间件。一个常见的错误是忘记此步骤,使中间件无效。以上是如何在Laravel应用程序中实现自定义中间件和过滤器?的详细内容。更多信息请关注PHP中文网其他相关文章!