Laravel Middleware更改响应内容

时间:2016-05-20 09:25:18

标签: laravel-5.2 middleware

对于我的应用程序,我有多个用户角色和自定义维护模式。如果站点处于维护模式,则根据用户的角色将限制他们访问某些页面。

因此,当“普通”用户访问论坛时,他们应该看到一个不同的视图,说明该网站处于维护模式;而当“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),但显示由中间件更改的不同视图。

1 个答案:

答案 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