2016-04-28 47 views
0

在Laravel 4.2,我有以下途径:如何选择控制器的路线

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

我有一个ClientControllerAdminController分别为普通用户和管理员。

假设我知道用户类型(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 __constructUserController.php

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

因此,客户必须将功能OnlyForAdmin1和功能OnlyForAdmin2用不上。

+0

Tks @HongbinWangI,但不认为Laravel 4.2支持中间件 – mutsa

+0

对不起,我忽略了你的laravel版本。 –