如何在Laravel中对指定的控制器操作进行过滤


How to do filter on specified controller action in Laravel

我有CartController路由过滤器似乎只能绑定到控制器或get上,我可以在"action"上做身份验证过滤器吗?

例如:

<?php
CartController extends BaseController {
    public function getIndex() {
        // not need filter
    }
    public function getList()
    {
        // not need filter
    }
    public function getCheck()
    {
        // need to filter
    }
}

您可以在类构造函数中设置BaseController beforeFilter()Action,并将要筛选的Actions作为"only"键控数组作为第二个参数传递。

$this->beforeFilter('filtername', 
                    array('only' => array('fooAction', 'barAction')));

使用示例代码:

<?php
CartController extends BaseController {
    public function __construct() {
        $this->beforeFilter('filtername', array('only' =>
                            array('getCheck')));
    }
    public function getIndex() {
        // not need filter
    }
    public function getList()
    {
        // not need filter
    }
    public function getCheck()
    {
        // need to filter
    }
}

来源:Laravel Docs:Controller Filter

你似乎想在同一个控制器中混合RESTful和普通方法(get/post-vs-action),至少在Laravel 3中这是不可能的。

对于过滤,您可以查看控制器过滤器,在那里您可以为特定方法指定身份验证过滤器,或者走另一条路,从过滤器中排除某些方法。

您可以在需要的方法中调用过滤器。

请参阅此处的文档,查看代码中的内容。

 $this->beforeFilter('my-filter-name');

我在资源控制器上遇到了类似的问题,能够做到这一点:

$this->beforeFilter('admin', [ 'except' => ['index','show'] ]);