2016-05-20 42 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