我的控制器中有过滤器的问题和参数。也许你们中的一个可以帮助我。谢谢。 我有一个类似于这个的控制器:
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
值是通过$id
方法传递的action_show($id)
。但是当我有一个没有参数的控制器方法时,一切正常。如何总是获取filter参数而不是方法参数?
感谢您的帮助!
答案 0 :(得分:1)
我可以确认会发生什么...当您向控制器添加过滤器时,传递给该操作的任何参数都会添加到过滤器参数的前面。您可以使用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);
});