对于我的应用程序,我有多个用户角色和自定义维护模式。如果站点处于维护模式,则根据用户的角色将限制他们访问某些页面。
因此,当“普通”用户访问论坛时,他们应该看到一个不同的视图,说明该网站处于维护模式;而当“admin”用户访问论坛时,他们应该能够看到论坛。
public function handle($request, Closure $next) {
if(Auth::user()->role->maintenance_mode != 1) {
// They do not have access during maintenance mode,
// so change the response to show a different view.
}
// They do have access during maintenance mode,
// so continue the request.
return $next($request);
}
是否可以使用相同的路径(例如/ forums),但显示由中间件更改的不同视图。
答案 0 :(得分:2)
有可能,是的,但每个中间件调用$next($request)
可能指向路由之前的另一个中间件,因此返回视图可能不是最好的主意。如果您做想要这样做,那么您需要执行以下操作:return new Response(view('maintanance'));
并且不要忘记在中间件类的标头中包含use Illuminate\Http\Response;
。
在你的情况下,我要做的是有一个路由返回一个视图,如/maintainance
(最好带有一个名字),然后在中间件中,返回一个重定向到路由return redirect()->route('maintanance');
内if
。
您还可以抛出状态代码为HttpException
的{{1}},让应用程序在第一个503
内调用Laravel的built in maintenance mode。