通过查询参数过滤路由的更好方法?

时间:2014-07-31 11:40:47

标签: php laravel laravel-4 laravel-routing

在Laravel 4.2项目中,我有以下路线:

Route::group(['prefix' => 'api/v' . Config::get('api.version')], function () {
    if (Input::get('api_key') != Config::get('api.key')) {
        App::abort(401, 'Invalid API key!');
    }

    // Do stuff below...
});

可通过以下方式访问:

http://domain.com/api/v1/do-stuff/value1/value2?api_key=2fl2bkqg2yqlf2l872qa

这对于用户使用密钥访问API非常有用。但是,当我运行php artisan migrate --seed时,它会触发api_key限制。

是否有更好的方法可以通过Laravel中的API密钥限制我的路由组,这不会导致迁移出现此问题?

1 个答案:

答案 0 :(得分:2)

创建路由组后,即使组中没有路由被触发,也会立即运行API检查。您可以将逻辑添加到过滤器,让组只保留路由以避免这种情况,并且仅在路由被过滤时执行api检查。

Route::filter("api", function()
{
    if (Input::get('api_key') != Config::get('api.key')) 
    {
        return App::abort(401, 'Invalid API key!');
    }
});

然后在您的路线组中删除内联代码并添加过滤器

Route::group(array('prefix' => 'api/v1', 'before' => 'api'), function()
{
    // Routes here
});

由于这些是过滤器,因此对于单元测试禁用它们。由于过滤器仅在该组中执行路径时运行,因此在创建路径组时,artisan命令不会触发api检查。