如何使用except()代替控制器方法而不是控制器方法?

时间:2012-10-05 01:02:46

标签: filter laravel

我今天刚开始学习Laravel框架。

我想全局检查用户的会话。我在基类的构造函数中放了一个过滤器,如下所示。

class Base_Controller extends Controller {

    public function __construct() {

        parent::__construct();

        $this->filter('before', 'auth')->except(array('login@index'));

    }

}

除了有一个问题外,它工作正常。我想忽略登录控制器的auth过滤器。我该怎么做?

我试过

除(array(“login”))除(array(“login.index))除(array(”login @ index) “))。他们都没有工作

1 个答案:

答案 0 :(得分:2)

在控制器中使用$this->filter()有一种不同的方法,可以在routes.php文件中执行此操作。当您在控制器中使用它时,except()将只接受该控制器的方法。

您可以解决问题,创建一个新的控制器,该控制器从Base_Controller延伸,如Base_Auth_Controller,用于检查身份验证过滤器。如果您检测到控制器是“Auth”(提示:Route::filter('before', function(){});),您可以使用return;,然后只使用Request::route()->controller但是您无法排除controller@action

或做类似的事情:

public function __construct() {

    parent::__construct();

    // you should check what exactly returns, I don't remember actually
    if(Request::route()->controller != 'Auth_Controller')
    {
         $this->filter('before', 'auth')->except(array('login@index'));
    }

}