2016-04-28 5 views
0

В Laravel 4.2, у меня есть следующий маршрут:Как выбрать контроллер в маршрутах

Route::group(array('before' => 'auth'), function() { 
    Route::post('/account/edit', array(
     'as' => 'account-edit', 
     'uses' => '[email protected]' 
    )); 
}); 

У меня есть ClientController и AdminController для обычного пользователя и администратора, соответственно.

Предполагая, что я знаю тип пользователя (Auth::getUser()->getType()), как я могу заменить UserController на правильный контроллер, не добавляя дополнительную логику для маршрутизации класса? Это можно сделать с помощью фильтров?

Я пытаюсь избежать дополнительного контроллера между маршрутами и конечным контроллером.

+0

Возможно, когда вы опускаете вопрос, вы могли бы объяснить, почему, чтобы улучшить его, не так ли? – mutsa

ответ

0

На самом деле, нет необходимости создавать два пользовательских контроллера. Просто используйте промежуточное ПО, чтобы ограничить права доступа клиентов. Таким образом, вы можете сохранить оригинал UserController.

Вы можете добавить IsAdmin.php в промежуточное программное обеспечение.

<?php namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Http\RedirectResponse; 
use Illuminate\Contracts\Auth\Guard; 

class IsAdmin { 

    public function handle($request, Closure $next) 
    { 

     if (Auth::getUser()->getType() === 'admin') 
     { 
      return $next($request); 
     } 
     return new RedirectResponse(url('/')); 
    } 

} 

В kernel.php, вам нужно объявить промежуточное программное обеспечение.

protected $routeMiddleware = [ 
     // some other middlewares 
     'admin' => 'App\Http\Middleware\IsAdmin', 
    ]; 

Затем добавьте следующие операторы public function __construct из UserController.php

$this->middleware('admin', ['only' => ['OnlyForAdmin1','OnlyForAdmin2']]); 

Таким образом, клиенты не будут иметь доступа к функции OnlyForAdmin1 и функции OnlyForAdmin2.

+0

Tks @HongbinWangI, но не думаю, что Laravel 4.2 поддерживает Middlewares – mutsa

+0

Прошу прощения, что я проигнорировал вашу версию laravel. –

Смежные вопросы