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 验证请求过滤器字段,字段名称中带有点(句点)