我在Laravel 4中有一个控制器,其中声明了一个自定义变量。
class SampleController extends BaseController{
public $customVariable;
}
两个问题:我是否可以在路由过滤器中调用:
提前致谢!
答案 0 :(得分: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:
根据你的新问题,我意识到上面的例子有一个小错误 - 因为我忘了闭包有本地范围。所以现在我猜是正确的。
答案 1 :(得分:0)
如果在控制器中将其声明为静态,则可以从控制器外部静态调用它
控制器:
class SampleController extends BaseController
{
public static $customVariable = 'test';
}
在你的控制器外面
echo SampleController::$customVariable
答案 2 :(得分:0)
使用:
public function __construct()
{
$this->beforeFilter('auth', ['controller' => $this]);
}