2013-04-11 52 views
0

我的控制器中有過濾器和參數。也許你們中的一個可以幫助我。謝謝。 我有類似這樣的控制器:Laravel使用參數在控制器中過濾之前

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)方法。但是,當我有一個沒有參數的控制器方法一切正常。我如何總是得到過濾器參數,而不是方法參數?

感謝您的幫助!

回答

1

我可以確認會發生什麼......當您向控制器添加過濾器時,傳遞給該操作的所有參數都會添加到過濾器參數的前面。您可以使用func_get_args()來確認是這種情況。

但是,當您向路由添加過濾器時,情況並非如此,過濾器在沒有任何其他參數的情況下運行。

所以我可以在這裏看到2個選擇,要麼過濾器添加到路由...

Route::get('test/(:any)', array('before' => 'permission:destroy|auth', 'use' => '[email protected]')); 

或修改您的過濾器使用func_get_args(),就像...

Route::filter('permission', function() 
{ 
    $args = func_get_args(); 
    $permission = array_pop($args); 

}); 
相關問題