0

我在 Laravel 4 中有一个控制器,其中声明了一个自定义变量。

class SampleController extends BaseController{
      public $customVariable;
}

两个问题:有什么方法可以在路由过滤器中调用:

  1. 运行过滤器的控制器对象。
  2. 来自该特定控制器的自定义变量 ($customVariable)。

提前致谢!

4

3 回答 3

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:

根据您的新问题,我意识到上面的示例有一个小错误 - 因为我忘记了闭包具有本地范围。所以现在我猜它是正确的。

于 2013-08-07T11:47:11.800 回答
0

如果在控制器中将其声明为静态,则可以从控制器外部静态调用它

控制器:

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

在您的控制器之外

echo SampleController::$customVariable

于 2013-08-07T13:57:06.343 回答
0

利用:

public function __construct()
{

    $this->beforeFilter('auth', ['controller' => $this]);
}
于 2013-12-03T02:40:31.030 回答