我在Laravel 4中有一個控制器,並在其中聲明瞭一個自定義變量。Laravel 4:過濾器內的參考控制器對象
class SampleController extends BaseController{
public $customVariable;
}
兩個問題:有沒有什麼辦法可以在路由過濾器中調用:
- 所述過濾器在運行時,控制器對象。
- 該特定控制器的自定義變量($ customVariable)。
在此先感謝!
我在Laravel 4中有一個控制器,並在其中聲明瞭一個自定義變量。Laravel 4:過濾器內的參考控制器對象
class SampleController extends BaseController{
public $customVariable;
}
兩個問題:有沒有什麼辦法可以在路由過濾器中調用:
在此先感謝!
按照這個帖子:
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:
按照您的新問題,我意識到上面的例子中有一個小錯誤 - 因爲我忘了關閉具有局部範圍。所以現在我猜想是正確的。
如果聲明它在你的控制器的靜態,可以靜態地從控制器的外部調用它
控制器:
class SampleController extends BaseController
{
public static $customVariable = 'test';
}
外部控制器
echo SampleController::$customVariable
變量不是靜態的,所以應該有一個控制器實例。得到了上面的答案。謝謝。 –
使用:
public function __construct()
{
$this->beforeFilter('auth', ['controller' => $this]);
}
嗨加多馬和感謝您的幫助,但我不認爲這是一個答案。我知道我可以將變量傳遞給過濾器,但我正在調用過濾器內的控制器正在運行並且還有該自定義變量。我將不勝感激任何幫助。謝謝! –
您可以隨時在Controller的構造函數中指定過濾器。 – Gadoma