2013-04-11 3 views
0

컨트롤러의 필터 및 매개 변수에 문제가 있습니다. 어쩌면 당신 중 하나가 나를 도울 수 있습니다. 고맙습니다. 나는이 유사한 컨트롤러가 있습니다Laravel Before 인수로 컨트롤러에서 필터하기

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

어떤 일이 발생했는지 확인할 수 있습니다 ... 컨트롤러에 필터를 추가하면 액션에 전달 된 모든 인수가 필터 인수 앞에 추가됩니다. 이 경우에 을 사용하여 확인할 수 있습니다.

그러나 경로에 필터를 추가하면 그렇지 않습니다. 추가 인수없이 필터가 실행됩니다.

그래서 ... 여기 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); 

}); 
관련 문제