Laravel定制过滤器

时间:2014-10-20 13:54:26

标签: php laravel laravel-4 routes

只有满足条件,我才能访问多条路线。否则我不应该访问这些路线。

我认为这应该通过过滤器完成,但我想我错过了一些关于它们如何工作的内容。

所以这是我的过滤器:

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部分的过滤器内部进行了重定向。我不想要那个,我只想要,如果过滤条件是真的,你就会看到那个网址。

2 个答案:

答案 0 :(得分:2)

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

  • 返回一些内容(例如重定向)
  • 或抛出异常

在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);
    }
}

Official Docs

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

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

答案 1 :(得分:0)

你不必在那里放任何东西,只是让函数返回void。这将告诉laravel允许用户查看该页面。您可以随时在return放置Route::filter('my.filter', function() { //some code regarding said condition if($mycondition==true){ return; }else{ //Error message } } ,让用户看到该页面并跳过以下所有条件。

如果不满足条件,最好将用户重定向到您解释用户无法看到该页面的原因的页面。

{{1}}