2016-05-20 2 views
0

Для моего приложения у меня есть несколько пользовательских ролей и пользовательский режим обслуживания. Если сайт находится в режиме обслуживания, то в зависимости от роли пользователя будет ограничиваться доступ к определенным страницам.Laravel Middleware change response content

Поэтому, когда «обычные» пользователи обращаются к форумам, вместо этого они должны видеть другое представление о том, что сайт находится в режиме обслуживания; тогда как пользователи «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); 
} 

Можно ли иметь один и тот же маршрут (например,/форумы), но, чтобы показать другую точку зрения, изменен ППО.

ответ

1

Возможно, да, однако каждое промежуточное звено вызывает $next($request), что может указывать на другое промежуточное программное обеспечение перед маршрутом, поэтому возвращение представления может быть не лучшей идеей. Если вы do хотите это сделать, вам нужно сделать что-то вроде: return new Response(view('maintanance')); и не забудьте включить use Illuminate\Http\Response; в заголовок вашего класса промежуточного ПО.

В вашем случае, то, что я хотел бы сделать, это есть путь, который возвращает вид, такие как /maintainance (желательно с именем), а затем в ПО промежуточного слоя, вернуть редирект на маршрут return redirect()->route('maintanance'); в if.

Вы также могли бы бросить HttpException с кодом состояния 503 иметь применение вызова Laravel-х built in maintenance mode в этой первой if.

+0

Абсолютно совершенный! Спасибо. – user2759865