2016-05-20 40 views
0

对于我的应用程序,我有多个用户角色和自定义维护模式。如果网站处于维护模式,则取决于用户的角色将限制他们访问某些页面。Laravel中间件更改响应内容

因此,当“普通”用户访问论坛时,他们应该看到不同的视图,说明该网站处于维护模式;而当“管理员”用户访问论坛时,他们应该能够看到论坛。

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

是否有可能具有相同的路线(例如/论坛),但显示不同的视图,由中间件更改。

回答

1

有可能,但是,每个中间件调用$next($request)可能指向路由之前的另一个中间件,因此返回视图可能不是最好的主意。如果你想要做,那么你需要做一些事情:return new Response(view('maintanance'));,不要忘记在你的中间件类的头文件中包含use Illuminate\Http\Response;

在你的情况,我会做的是有诸如/maintainance(最好用名)返回一个视图,然后在中间件中,if内返回重定向到路线return redirect()->route('maintanance');的路线。

您也可以抛出一个HttpException的状态码503,让应用程序在该第一个if范围内调用Laravel的built in maintenance mode

+0

绝对完美!谢谢。 – user2759865