2013-08-07 44 views
0

我在Laravel 4中有一個控制器,並在其中聲明瞭一個自定義變量。Laravel 4:過濾器內的參考控制器對象

class SampleController extends BaseController{ 
     public $customVariable; 
} 

兩個問題:有沒有什麼辦法可以在路由過濾器中調用:

  1. 所述過濾器在運行時,控制器對象。
  2. 該特定控制器的自定義變量($ customVariable)。

在此先感謝!

回答

1


按照這個帖子:
http://forums.laravel.io/viewtopic.php?pid=47380#p47380

只能將參數傳遞給過濾器的字符串。

//routes.php 
Route::get('/', ['before' => 'auth.level:1', function() 
{ 
return View::make('hello'); 
}]); 

//filters.php 
Route::filter('auth.level', function($level) 
{ 
    //$level is 1 
}); 

在控制器,它看起來更像是這個

public function __construct(){ 
    $this->filter('before', 'someFilter:param1,param2'); 
} 

編輯:

如果這還不夠你的需求,你可以永諾定義控制器構造函數內的過濾器。如果您需要訪問當前控制器($ this)並且它是自定義字段,並且您有許多不同的類,您可以將過濾器放入BaseController的構造函數中,並將其擴展到所需的所有類中。

class SomeFancyController extends BaseController { 

protected $customVariable 

/** 
* Instantiate a new SomeFancyController instance. 
*/ 
public function __construct() 
{ 
    $ctrl = $this; 
    $this->beforeFilter(function() use ($ctrl) 
    { 
     // 
     // do something with $ctrl 
     // do something with $ctrl->customVariable; 
    }); 
} 

}

編輯2:

按照您的新問題,我意識到上面的例子中有一個小錯誤 - 因爲我忘了關閉具有局部範圍。所以現在我猜想是正確的。

+0

嗨加多馬和感謝您的幫助,但我不認爲這是一個答案。我知道我可以將變量傳遞給過濾器,但我正在調用過濾器內的控制器正在運行並且還有該自定義變量。我將不勝感激任何幫助。謝謝! –

+0

您可以隨時在Controller的構造函數中指定過濾器。 – Gadoma

0

如果聲明它在你的控制器的靜態,可以靜態地從控制器的外部調用它

控制器:

class SampleController extends BaseController 
{ 
    public static $customVariable = 'test'; 
} 

外部控制器

echo SampleController::$customVariable

+0

變量不是靜態的,所以應該有一個控制器實例。得到了上面的答案。謝謝。 –

0

使用:

public function __construct() 
{ 

    $this->beforeFilter('auth', ['controller' => $this]); 
}