Laravel - 中间件:请求处理的门户
你好,未来的 Laravel 开发者们!今天,我们将深入 Laravel 中间件的迷人世界。把中间件想象成你应用程序的贴心保安——它在请求到达你的主要应用程序逻辑之前进行检查和处理。让我们一起踏上这段激动人心的旅程!
什么是中间件?
在深入代码之前,让我们先了解一下中间件是什么。想象你在举办一个派对(你的应用程序),门口有一个保安(中间件)。这个保安可以:
- 检查人们是否在宾客名单上(身份验证)
- 确保他们穿着得体(验证)
- 给他们一个手环(向请求中添加信息)
- 或者甚至拒绝他们入内(终止请求)
这正是中间件为你的 Laravel 应用程序所做的!
注册中间件
现在,让我们看看如何创建和注册我们自己的中间件。
创建中间件
首先,我们将创建一个简单的中间件来检查用户是否年满18岁:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 18) {
return redirect('home');
}
return $next($request);
}
}
在这个例子中,我们的 CheckAge
中间件检查请求中的 age
参数是否超过18岁。如果没有,它将重定向到主页。否则,它将请求传递给下一个中间件或主应用程序。
注册全局中间件
要全局使用这个中间件(对所有路由),我们需要在 app/Http/Kernel.php
文件中注册它:
protected $middleware = [
// ...
\App\Http\Middleware\CheckAge::class,
];
注册路由中间件
如果你只想为特定路由使用中间件,你可以将其注册为路由中间件:
protected $routeMiddleware = [
// ...
'checkage' => \App\Http\Middleware\CheckAge::class,
];
然后,你可以像这样在路由中使用它:
Route::get('adult-only', function () {
//
})->middleware('checkage');
中间件参数
有时,我们希望中间件更具灵活性。这时,中间件参数就派上用场了!
让我们修改 CheckAge
中间件,使其接受一个最小年龄参数:
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next, $minAge)
{
if ($request->age <= $minAge) {
return redirect('home');
}
return $next($request);
}
}
现在,我们可以使用这个中间件设置不同的年龄限制:
Route::get('adult-only', function () {
//
})->middleware('checkage:18');
Route::get('senior-only', function () {
//
})->middleware('checkage:65');
这难道不酷吗?我们已经使中间件在不同场景下可重用!
可终止的中间件
有时,我们希望在响应发送到浏览器后,中间件能做一些事情。这时,可终止的中间件就派上用场了!
让我们创建一个记录响应时间的中间件:
<?php
namespace App\Http\Middleware;
use Closure;
class LogResponseTime
{
public function handle($request, Closure $next)
{
$request->start_time = microtime(true);
return $next($request);
}
public function terminate($request, $response)
{
$duration = microtime(true) - $request->start_time;
\Log::info('响应时间:' . $duration . ' 秒');
}
}
这个中间件向请求添加了一个 start_time
,然后在响应发送后记录总响应时间。
要使用可终止的中间件,确保它在 app/Http/Kernel.php
文件中注册:
protected $middleware = [
// ...
\App\Http\Middleware\LogResponseTime::class,
];
中间件方法
下面是你在使用中间件时将使用的主要方法表格:
方法 | 描述 |
---|---|
handle() |
主要的中间件逻辑。处理请求并可选地传递给下一个中间件。 |
terminate() |
在响应发送到浏览器后运行。用于清理或日志记录。 |
结论
就这样,朋友们!我们已经穿越了 Laravel 中间件的土地,从创建和注册中间件到使用参数和可终止的中间件。记住,中间件就像是请求处理的瑞士军刀——它多功能、强大,是你 Laravel 工具箱中的必备工具。
在你继续 Laravel 的冒险之旅时,你会发现无数创造性地使用中间件的方法。也许你会创建用于检查维护模式、记录请求或甚至转换请求数据的中间件。可能性无穷无尽!
继续编码,继续学习,最重要的是,享受乐趣!下次见,快乐的 Laravel 编程!
Credits: Image by storyset