Laravel 中间件更改响应内容
Laravel Middleware change response content
对于我的应用程序,我有多个用户角色和自定义维护模式。如果站点处于维护模式,则将根据用户的角色限制他们对某些页面的访问。
因此,当 "normal" 用户访问论坛时,他们应该看到一个不同的视图,表明该站点处于维护模式;而当 "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)但显示不同的视图,由中间件更改。
这是可能的,是的,但是每个中间件调用 $next($request)
可能指向路由之前的另一个中间件,因此 return 创建视图可能不是最好的主意。如果你 想要这样做,那么你需要做类似的事情: return new Response(view('maintanance'));
并且不要忘记在 header 中包含 use Illuminate\Http\Response;
你的中间件 class.
在你的情况下,我会做的是有一条路线 return 是一个视图,例如 /maintainance
(最好有一个名称),然后在中间件中, return 一个重定向到 if
.
中的路由 return redirect()->route('maintanance');
您还可以抛出状态代码为 503
的 HttpException
,让应用程序在第一个 if
中调用 Laravel 的 built in maintenance mode .
对于我的应用程序,我有多个用户角色和自定义维护模式。如果站点处于维护模式,则将根据用户的角色限制他们对某些页面的访问。
因此,当 "normal" 用户访问论坛时,他们应该看到一个不同的视图,表明该站点处于维护模式;而当 "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)但显示不同的视图,由中间件更改。
这是可能的,是的,但是每个中间件调用 $next($request)
可能指向路由之前的另一个中间件,因此 return 创建视图可能不是最好的主意。如果你 想要这样做,那么你需要做类似的事情: return new Response(view('maintanance'));
并且不要忘记在 header 中包含 use Illuminate\Http\Response;
你的中间件 class.
在你的情况下,我会做的是有一条路线 return 是一个视图,例如 /maintainance
(最好有一个名称),然后在中间件中, return 一个重定向到 if
.
return redirect()->route('maintanance');
您还可以抛出状态代码为 503
的 HttpException
,让应用程序在第一个 if
中调用 Laravel 的 built in maintenance mode .