2013-08-07 56 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]); 
}