在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
过滤器?
答案 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');
}