我是初学者,我不清楚Laravel中的中间件概念。请帮我用一个例子来清除这个概念。
答案 0 :(得分:3)
中间件是放在两个请求之间的东西。
假设您需要确保当用户访问特定路由组时,他/她已经过身份验证。
有两种选择:
在第一种情况下,您应该在每个控制器中写入相同的代码。
使用中间件,您可以在应用程序的多个部分中重复使用一段代码。
假设我们想创建一个需要检查用户是否已登录的中间件:
namespace App\Http\Middleware;
use Closure;
class UserIsLoggedIn
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!auth()->user()) {
return redirect('home');
}
return $next($request);
}
}
现在使用此代码,我们可以检查用户所需的位置
首先,因为这是一个自定义中间件,您需要在$ app/Http/Kernel.php
属性的routeMiddleware
文件中注册它:
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
// ...
'isLoggedIn => \App\Http\Middleware\UserIsLoggedIn::class,
];
假设您有一组需要检查用户登录的路由:
Route::get('admin/profile', function () {
//
})->middleware('isLoggedIn');
现在该组中的所有路由都将检查用户是否已登录,否则他将重定向到家。
现在假设您有另一个需要确保用户已登录的控制器,现在您可以重新使用中间件来执行此操作:
class MyController extend Controller {
function __construct(){
$this->middleware('isLoggedIn');
}
}
因此,中间件可以帮助您组织登录并重复使用特定任务的代码片段。
Laravel有很多关于中间件的文档,你可以find here