【问题标题】:Laravel, call filter in filterLaravel,过滤器中调用过滤器
【发布时间】: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 等等,看起来你会面临很多痛苦。依赖关系将很难维护。

标签: php laravel filter routing


【解决方案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 个参数。这永远行不通。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2018-12-09
    • 1970-01-01
    • 2014-12-10
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多