【问题标题】:how is a before filter called from a route on the router instance in laravel如何从 laravel 中路由器实例上的路由调用前置过滤器
【发布时间】:2014-05-19 09:23:17
【问题描述】:

from the documentation 我可以这样称呼它

Route::get('profile', array('before' => 'auth',
            'uses' => 'UserController@showProfile'));

路由器将使用属性before创建路由

Route->run 中调用如下

list($name, $params) = $this->parseFilter($name, $params);

if ( ! is_null($callable = $this->router->getFilter($name)))
{
   return call_user_func_array($callable, $params);
}

我的问题是:路由器如何知道过滤器的名称。我按照createRoute方法?

谢谢

【问题讨论】:

    标签: php laravel routing


    【解决方案1】:

    我不太确定你在问什么 - 但 Laravel 有两个过滤器 - beforeafter

    在调用您的路由之前运行过滤器之前。您可以根据需要将任意数量的过滤器附加到您的before - 就像这样:'before' => 'auth|other|example'。在这种情况下,它将运行 authotherexample(按此顺序)。

    您可以使用 after 过滤器做同样的事情。

    这个过滤器可以像你的例子一样应用在路由文件中

    Route::get('profile', array('before' => 'auth',
                'uses' => 'UserController@showProfile'));
    

    或者如果你喜欢的话,它们可以应用在控制器内部

    class UserController extends BaseController {
    
        public function __construct()
        {
            $this->beforeFilter('auth');
        }
    }
    

    您也可以在控制器中专门过滤器过滤器仅适用于特定路由

    public function __construct()
    {
        $this->beforeFilter('csrf', array('on' => 'post'));
    }
    

    或者你可以说它适用于除特定路线之外的所有路线

    public function __construct()
    {
        $this->beforeFilter('auth', array('except' => 'post'));
    }
    

    【讨论】:

    • 我相信 OP 对如何使用过滤器非常熟悉。他的问题更多是关于路由/过滤器的内部工作原理。
    • 正如我所说 - 我不完全确定他在问什么 - 这个问题可以用多种方式解释。因此,我正在尝试尽可能多地提供有关路由和过滤器的信息。
    【解决方案2】:

    我相信你是在询问 Laravel 4.0,只是从你提供的代码 sn-p 中猜测。 Routing 模块中的代码在 Laravel 4.1 中发生了相当大的变化。

    路由器知道过滤器的名称,因为路由器保留了该数据!。

    让我们从创建前过滤器开始。在调用路由类中创建before 过滤器before() 方法时。

    public function before()
    {
        $this->setBeforeFilters(func_get_args());
    
        return $this;
    }
    

    在这个函数中,参数由func_get_args函数读取。

    然后使用setBeforeFilters方法将过滤器名称和过滤器参数设置为内部数据存储。

    我希望这能回答您的问题。 (如果我理解正确的话)

    【讨论】:

    • 是的,我知道它是如何在内部存储的。这是一个很好的答案。
    猜你喜欢
    • 2013-11-12
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2015-01-26
    • 2015-08-30
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多