Laravel 控制器:控制器中使用中间件
问题
如何在控制器中使用中间件?
回答
在Laravel 中,可以在控制器的构造函数中指定中间件,这比在路由文件中分配中间件给控制器路由方便得多。
实践
在控制器的构造函数中,使用 middleware
方法即可将中间件分配给控制器的操作,而且还可进一步细分,将中间件限制仅用于控制器类上的某些方法。
class UserController extends Controller
{
/**
* Instantiate a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('log')->only('index');
$this->middleware('subscribed')->except('store');
}
}
将中间件应用于整个控制器:
$this->middleware('auth');
将中间件仅应用于控制器的 index
方法
$this->middleware('log')->only('index');
将中间件 subscribed
应用于控制器中除 store
之外的所有方法
$this->middleware('subscribed')->except('store');
此外,middleware
方法还支持以闭包形式来注册中间件。这样,我们就不必创建一个完整的中间件类了,这为单个控制器定义中间件提供了一种方便的方法:
$this->middleware(function ($request, $next) {
// ...
return $next($request);
});
优雅