我有一些麻烦与过滤器在我的控制器和有参数。也许你们谁能帮我。谢谢你!我有一个类似的控制器:
class Test extends Base_Controller
{
public function __construct()
{
parent::__construct();
$this->filter('before', 'permission:destroy|auth')->only(array('show'));
}
public function action_show($id)
{
}
,我定义了这样一个过滤器:
Route::filter('permission', function($permission)
{
echo $permisson;
如果我现在调用控制器,我的过滤器的$permission
值是通过action_show($id)
方法传递的$id
。但是当我有一个没有参数的控制器方法时一切都很好。我如何总是获得过滤器参数而不是方法参数?
谢谢你的帮助!
我可以确认发生了什么…当您向控制器添加过滤器时,传递给动作的任何参数都会添加到过滤器参数的前面。您可以使用func_get_args()
来确认这种情况。
但是,当你给路由添加一个过滤器时,情况就不是这样了,这个过滤器不需要任何额外的参数就会运行。
所以我在这里可以看到两个选择,要么添加过滤器到路由…
Route::get('test/(:any)', array('before' => 'permission:destroy|auth', 'use' => 'test@show'));
或者修改你的过滤器使用func_get_args()
,像…
Route::filter('permission', function()
{
$args = func_get_args();
$permission = array_pop($args);
});