什么是中间件?
在Laravel中,中间件实际上是HTTP请求的过滤器或者是处理HTTP请求和响应的操作。中间件允许我们在请求到达应用程序之前或者在响应发送回客户端之前执行一些操作。比如,可以用Middleware检查用户是否登录,如果没有登录就不允许进入受保护的路由或者就重定向到登录页面。
可以把中间件看作是Laravel应用程序中很重要的组成部分,可以大大的简化我们开发的程序。
如何创建中间件?
可以使用 Artisan 命令行工具生成中间件,使用 php artisan command:
php artisan make:middleware CheckAge
运行上述命令会在项目的 app/Http/Middleware 目录下生成一个文件名为 CheckAge.php 的中间件。
如何在控制器中使用中间件?
调用中间件可以在 HTTP 控制器类的构造函数中通过对 $this->middleware 方法的调用:
/**
* Instantiate a new UserController instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
在上面的代码中,中间件被附加到此控制器的整个范围,这意味着每个动作都必须通过 auth 中间件才能被访问。
中间件如何传递参数到控制器中?
在某些情况下,您可能需要从中间件向您的控制器传递额外的参数。例如,您的程序可能需要确定当前用户的角色或传递某些参数来完成某些操作。
要将参数传递到控制器中,请将参数作为数组传递给 $next 短语:
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string $role
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if (! $request->user->hasRole($role)) {
// Redirect...
}
return $next($request);
}
在上面的代码中,我们向中间件添加了额外的 $role 参数。然后在handle方法中,我们可以检查当前用户是否拥有指定的角色。如果用户没有指定的角色,则将请求重定向到其他页面并在代码中结束操作。