在Laravel 4中运行控制器过滤器的顺序是什么

时间:2014-05-29 08:47:50

标签: php laravel laravel-4

例如,我在我的BaseController中有这个:

public function __construct($module = 'basic')
{
    $this->beforeFilter('cf.access:' . $module.',create', array('on' => 'post'));
    $this->beforeFilter('cf.access:' . $module.',read', array('on' => 'get'));
    $this->beforeFilter('cf.access:' . $module.',update', array('on' => 'put'));
    $this->beforeFilter('cf.access:' . $module.',delete', array('on' => 'delete'));
}

如果现在,我想在POST上放置另一个过滤器,它们的执行顺序是什么?

1 个答案:

答案 0 :(得分:2)

我没有找到执行订单的任何文档,但根据我自己的经验,它们是自上而下的,所以万一他们不能设法接受过滤器,他们会停止执行,并且#39; s。所以如果你继续添加过滤器:

public function __construct($module = 'basic')
{
    $this->beforeFilter('cf.access:' . $module.',create', array('on' => 'post'));
    $this->beforeFilter('cf.access:' . $module.',read', array('on' => 'get'));
    $this->beforeFilter('cf.access:' . $module.',update', array('on' => 'put'));
    $this->beforeFilter('cf.access:' . $module.',delete', array('on' => 'delete'));
    $this->beforeFilter('is_db_writable', array('on' => 'post')); //new entry
}

系统会检查:

  1. 以前定义的过滤器是否适用?
  2. 此用户可以cf.access:{$module}create吗?
  3. Is_db_writable此刻?
  4. 从我的头脑中,你能做的最好的事情就是检查实际工作的内容。定义您自己的过滤器并手动返回falsetrue,并记录每次执行。

    public function __construct($module = 'basic')
    {
        $this->beforeFilter('always_return_true', array('on' => 'post'));
        $this->beforeFilter('always_return_false', array('on' => 'post'));
    }
    

    是否显示第二个过滤器的日志?然后订单是自上而下的。