2015-01-07 42 views
0

我想知道如何作为一个数组传递角色,因为当我尝试在我的控制器构造中这样做时,它总是看起来只是管理员。在控制器的构造中传递一个数组与laravel

,以下是我app/controllers/UserscController.php

class UsersController extends BaseController { 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->beforeFilter('role:Administrator,Owner'); 
    } 
} 

以下是我app/filters.php

Route::filter('role', function($route, $request, $roles) 
{ 
    if(Auth::guest() !== true) 
    { 
     if(!empty($roles)) 
     { 
      $roles = explode(',', $roles); 
      if(count($roles) > 0) 
      { 
       foreach($roles as $role) 
       { 
        if (Auth::user()->role->role_name == $role) 
        { 
         return; 
        } 
       } 
      } 
     } 
     return Redirect::to('/youshallnotpass'); 
    } 
}); 
+0

你可以在过滤器中使用var_dump($ roles)吗? – lukasgeiter

回答

2

您可以设置角色在你的控制器参数。将角色加载到你的过滤器,你会做到这一点:

Route::filter('role', function($route, $request) 
{ 
    if(Auth::guest() !== true) 
    { 
     $roles = $route->parameter('roles'); 
     if(!empty($roles)) 
     { 
      foreach($roles as $role) 
      { 
       if (Auth::user()->role->role_name == $role) 
       { 
        return; 
       } 
      } 
     } 
     return Redirect::to('/youshallnotpass'); 
    } 
}); 

注: laraval 4.1之前,你可以使用:的$roles = $route->parameter('roles');$roles = $route->getParameter('roles');代替

希望这有助于!

1

Laravel已经爆炸的逗号您的过滤参数,允许传递多个参数的过滤器。所以,就你而言,你实际上已经将两个参数传递给了你的过滤器:第一个参数的值是'Administrator',第二个参数的值是'Owner'。

所以,两个快速选项是:你用你的字串

变化的分隔符。在你的控制器:$this->beforeFilter('role:Administrator;Owner');,然后在你的过滤器:$roles = explode(';', $roles);

或者独自离开你的控制器代码,并使用PHP的func_get_args()功能在你的过滤器:

Route::filter('role', function($route, $request) 
{ 
    if(Auth::guest() !== true) 
    { 
     $roles = array_slice(func_get_args(), 2); 
     foreach($roles as $role) 
     { 
      if (Auth::user()->role->role_name == $role) 
      { 
       return; 
      } 
     } 
     return Redirect::to('/youshallnotpass'); 
    } 
}); 
相关问题