Laravel,过滤器中调用过滤器

Posted

技术标签:

【中文标题】Laravel,过滤器中调用过滤器【英文标题】:Laravel, call filter in filter 【发布时间】:2014-09-23 13:57:39 【问题描述】:

如何使用 laravel 在过滤器中调用过滤器?

我有这个过滤器:

Route::filter('auth', function()

    if (Auth::guest())
    
        if (Request::ajax())
        
            return Response::make('Unauthorized', 401);
        
        else
        
            return Redirect::guest('login');
        
    
);

现在我创建另一个名为 admin 的过滤器,我想在此调用 auth 过滤器:

Route::filter('admin', function()
    #call auth filter

    #code    
);

有可能吗?

【问题讨论】:

你为什么要这样做?您是否考虑过以与身份验证过滤器相同的方式附加该过滤器? 我知道这个解决方案,但对我的实现来说不是最好的......因为我有很多过滤器需要由其他过滤器调用,有时我需要通过传递参数来禁用它... PS对不起我的英语不好 对于高级过滤,您可能希望使用类而不是闭包。由于过滤器类是从应用程序 IoC 容器中解析出来的,因此您将能够在这些过滤器中利用依赖注入来提高可测试性。 laravel.com/docs/routing#route-filters 在部分底部 你想做什么?如果您的代码被一堆不同的过滤器调用,请尝试编写一个库类。如果您想调用一堆不同的过滤器,最好将它们链接在一起路由或使用@delmadord 的过滤器类建议。如果你设置了一堆相互关联的过滤器,其中 A 调用 B,B 调用 C 等等,看起来你会面临很多痛苦。依赖关系将很难维护。 【参考方案1】:

按照@Dwight 的建议在Illuminate\Routing\RouteFiltererInterface 中使用callRouteFilter() 方法:

Route::filter('admin', function ($route, $request) 
    if ($r = Route::callRouteFilter('auth', array(), $route, $request)) 
        return $r;
    
);

【讨论】:

【参考方案2】:

尝试使用callRouteFilter() method

Route::filter('admin', function()

    Route::callRouteFilter('auth');
);

【讨论】:

callRouteFilter 需要前 4 个参数。这永远行不通。

以上是关于Laravel,过滤器中调用过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 验证请求过滤器字段,字段名称中带有点(句点)

laravel 路由过滤器检查用户角色

在 Laravel 中:如何根据 URI 将多个过滤器应用于一整套路由?

Laravel,两列之间的日期范围过滤器

Laravel 中的急切负载约束过滤器问题

下一页单击分页后Laravel过滤器重置