2013-06-05 74 views
1

我正在構建一個權限系統,我需要在每個控制器的每個方法上都有粒度,所以我打算在我的基礎控制器上使用__call魔術方法來實現此功能,如下所示:Laravel 4魔術方法__call替換控制器

public function __call($name, $args) 
{  
    if ($this->checkPermission()) 
    { 

     call_user_func_array(array($this, $name), $args); 
    } 
    else 
    { 
     // handle error 
    } 

} 

但顯然這不適用於Laravel 4.如何正確的方法來模擬__call魔法方法?我想過過濾器,但他們沒有交給被調用的方法名稱和參數

回答

3

__call是一種神奇的方法,當方法不存在於類中時被調用。所以我不明白這對你有什麼幫助。

我的建議是使用before過濾器,因爲您可以訪問當前的路由和請求。

Route::filter('permissions', function($route, $request) 
{ 

}); 

然後,您可以使用方法,如$route->getAction()提取控制器和方法將被調用,$route->getParameters()$request->segment()得到的參數。

只需註冊應用此過濾器的組內的所有路由。

Route::group(array('before' => 'permissions'), function() 
{ 
    Route::get('/', function() { }); 
}); 
+0

謝謝!我對這個答案感到困惑__call stackoverflow.com/questions/3716649/ – silkAdmin