我在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