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');

您还可以抛出状态代码为 503HttpException,让应用程序在第一个 if 中调用 Laravel 的 built in maintenance mode .