在Laravel中,如何使用'Route :: when()'方法在所有路由上应用过滤器?

时间:2015-02-05 21:21:23

标签: php laravel laravel-filters

在Laravel 4中,我发现如果我想将before过滤器附加到网站的所有路径,我可以使用App::before()文件中存在的app/filters.php方法,例如这样:

App::before(function($request)
{ 
    // my code here..
});

但是因为我discovered我无法在Route::currentRouteName()方法中使用App::before()方法,所以我找了另一种方法来做到这一点,我发现我可以创建一个自定义在app/filters.php文件中过滤,如下所示:

Route::filter('my_filter_name', function()
{
    // my code to apply on all routes..
});

app/routes.php文件中,我编写了下一个基于模式的过滤器:

Route::when('*', 'my_filter_name');

它完全符合我的要求,我可以在我的自定义过滤器中使用Route::currentRouteName()方法。但我注意到(如果我错了,请纠正我)Route::when()方法将my_filter_name视为before过滤器。现在我想知道:如何使用此Route::when()方法应用before和/或after过滤器?

2 个答案:

答案 0 :(得分:2)

你可以这样做

在你的路线

Route::group(array('before/after' => 'my_filter_name'), function()
{
    Route::get('/', function()
    {
        // Has my_filter_name Filter
    });

    Route::get('another', function()
    {
        // Has my_filter_name Filter
    });
});

答案 1 :(得分:1)

不幸的是,Laravel不允许在使用Route::when()过滤后添加模式。正确的方法是将您的路线包装在一个组中:

Route::group(array('after' => 'my_filter_name'), function(){
    // routes
});

如果你真的不能使用一个小组,还有另一个解决方案。虽然它有点hacky ......

注册所有路由后(通常在routes.php的底部),您可以添加循环遍历所有路由的代码,并将后过滤器添加到每个路由:

foreach(Route::getRoutes() as $route){
    $route->after('my_filter_name');
}