使用 laravel 在控制器的构造中传递数组
Passing an array in the construct of a controller with 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');
}
});
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');
}
});
您可以将角色设置为控制器中的参数。要将角色加载到您的过滤器中,您可以这样做:
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->getParameter('roles');
而不是 $roles = $route->parameter('roles');
希望对您有所帮助!
我想知道如何将角色作为数组传递,因为当我尝试在我的控制器构造中执行此操作时,它似乎总是只有管理员。
以下是我的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');
}
});
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');
}
});
您可以将角色设置为控制器中的参数。要将角色加载到您的过滤器中,您可以这样做:
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->getParameter('roles');
而不是 $roles = $route->parameter('roles');
希望对您有所帮助!