15 Laravel框架中的应用中间件
在上一篇中,我们探讨了中间件的定义和基本概念。现在,我们将重点关注“应用中间件”的生成与使用,以及它们在Laravel框架中的重要性。
什么是应用中间件?
在Laravel中,中间件提供了一种方便的机制,可以过滤进入应用程序的HTTP请求。应用中间件是你在应用中创建的自定义中间件,主要用于执行特定的操作,比如认证、日志记录、CORS控制等。
创建应用中间件
要创建一个新的应用中间件,我们可以使用Laravel的 Artisan 命令。以下是如何生成一个简单的应用中间件的步骤:
-
使用 Artisan 命令生成中间件
在终端中运行以下命令:
php artisan make:middleware CheckAge
这将在
app/Http/Middleware
目录下生成一个名为CheckAge.php
的中间件文件。 -
编辑中间件
打开生成的文件,并在
handle
方法中编写逻辑。以下是一个示例代码,它检查用户的年龄是否大于 18 岁:<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class CheckAge { /** * 处理请求 * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param int $age * @return mixed */ public function handle(Request $request, Closure $next, $age) { if ($request->age < $age) { return response('You are not old enough.', 403); } return $next($request); } }
在这个例子中,中间件检查请求中的
age
参数。如果年龄小于指定值,返回一个403响应,拒绝访问。
注册中间件
生成应用中间件后,必须在 app/Http/Kernel.php
文件中注册它。你可以选择将其注册为全局中间件,路由中间件或组中间件。
在路由中间件中注册
在 Kernel.php
文件的 $routeMiddleware
数组中添加你的中间件。示例代码如下:
protected $routeMiddleware = [
// ...
'checkage' => \App\Http\Middleware\CheckAge::class,
];
现在,你可以在路由中使用这个中间件。
使用中间件
在 routes/web.php
文件中,你可以通过以下方式应用中间件:
Route::get('/restricted', function () {
return 'This is a restricted area.';
})->middleware('checkage:18');
在这里,我们定义了一个 /restricted
路由,如果用户访问这个路由并且年龄小于 18 岁,就会收到 "You are not old enough." 的错误反馈。
怎么测试应用中间件?
为了测试中间件的功能,我们可以使用 Laravel 的集成测试。创建一个测试案例并对中间件进行测试:
php artisan make:test CheckAgeTest
然后在测试文件中编写类似下面的代码:
public function testUserIsNotOldEnough()
{
$response = $this->get('/restricted?age=17');
$response->assertStatus(403);
}
public function testUserIsOldEnough()
{
$response = $this->get('/restricted?age=18');
$response->assertStatus(200);
}
这段代码验证了当用户年龄小于18岁时是否返回403状态,而当年龄大于或等于18岁时是否返回200状态。
小结
在本节中,我们深入探讨了Laravel框架中的应用中间件,包括如何创建、注册和使用它们。应用中间件为我们的应用程序提供了强大的灵活性和可扩展性,能够进行请求过滤和控制。
在下一篇文章中,我们将讨论视图与模板引擎,具体关注Laravel自带的 Blade
模板引擎,并示范如何使用它来简化视图的开发。