Laravel自定义过滤器


Laravel custom filter

只有在满足条件的情况下,我才能访问许多路由。否则我就不能进入那些路线。

我想这应该用过滤器来完成,但我想我错过了一些关于它们如何工作的东西。

这就是我的过滤器:

Route::filter('my.filter', function()
{
    //some code regarding said condition
    if($mycondition==true){
        //WHAT TO PUT HERE?
    }else{
        //Error message
    }
}

在我的路线上,我会有:

Route::group(array('before' => 'my.filter'), function()
{
    Route::resource('cities', 'CitiesController');
    //... many more controllers here
});

但是我看到的所有例子都在if部分的过滤器中有一个重定向。我不想那样,我只想,如果过滤器中的条件为真,你可以看到那个url。

如果你想让你的过滤器停止进一步执行你的路线(和控制器等等),你必须:

  • 返回某些内容(例如重定向)
  • 或引发异常

在Laravel,你可以很容易地做到这一点:

Route::filter('my.filter', function()
{
    //some code regarding said condition
    if($mycondition==true){
        // here you have to do nothing so you could also flip the if...
    }else{
        App::abort(403);
    }
}

官方文件

小旁注:正如上面在评论中提到的,我会翻转if。比如:

Route::filter('my.filter', function()
{
    //some code regarding said condition
    if($mycondition==false){
        App::abort(403);
    }
}

您不必在那里放任何东西,只需让函数返回void即可。这将告诉laravel允许用户查看页面。您总是可以自己在那里放一个return,让用户看到页面并跳过以下所有条件。

当不满足条件时,最好将用户重定向到一个页面,在该页面上解释用户无法看到该页面的原因。

Route::filter('my.filter', function()
{
    //some code regarding said condition
    if($mycondition==true){
        return;
    }else{
        //Error message
    }
}