2016-05-20 10 views
0

Für meine Anwendung habe ich mehrere Benutzerrollen und einen benutzerdefinierten Wartungsmodus. Wenn sich die Site im Wartungsmodus befindet, wird der Zugriff auf bestimmte Seiten abhängig von der Rolle des Benutzers eingeschränkt.Laravel Middleware Änderung Antwort Inhalt

Wenn also "normale" Benutzer auf die Foren zugreifen, sollten sie stattdessen eine andere Ansicht sehen, die besagt, dass sich die Site im Wartungsmodus befindet. während "admin" Benutzer auf die Foren zugreifen, sollten sie in der Lage sein, die Foren zu sehen.

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

Ist es möglich, den gleichen Weg zu haben (z/Foren), aber eine andere Ansicht zu zeigen, von der Middleware verändert.

Antwort

1

Es ist möglich, ja, aber jede Middleware ruft $next($request), die auf eine andere Middleware vor der Route zeigen kann, daher eine Ansicht möglicherweise nicht die beste Idee sein. Wenn Sie tun wollen, dann müssen Sie etwas tun wie: return new Response(view('maintanance')); und vergessen Sie nicht, use Illuminate\Http\Response; in den Header Ihrer Middleware-Klasse aufzunehmen.

In Ihrem Fall, was ich tun würde, ist eine Route, die eine Ansicht wie /maintainance (vorzugsweise mit einem Namen) und dann in der Middleware zurückgibt, eine Umleitung auf die Route return redirect()->route('maintanance'); im if zurückzukehren.

könnten Sie auch einen HttpException mit dem Statuscode 503 werfen die Anwendung aufrufen Laravel die haben built in maintenance mode innerhalb dieser ersten if.

+0

Absolut perfekt! Vielen Dank. – user2759865

Verwandte Themen