我正在尝试完成我使用Slim框架编写的API的API版本控制。
我所有的版本化API都是这样的:
$app->get('/:version/book/search', function() {...});我正在尝试为这个版本创建一个应用程序范围的路由条件,如下所示:
\Slim\Route::setDefaultConditions(array(
'version' => 'v[3-6]'
));因此只允许版本号为v3、v4、v5和v6的API获取。
我的要求是将API调用的确切版本存储在$app->version中,然后在需要时进行特定于版本的代码更改。我已经创建了一个中间件,并将其添加到$app本身,因此它将在每次调用时执行:
$app->add(new \GetVerMiddleware());
class GetVerMiddleware extends \Slim\Middleware
{
public function call()
{
// HOW TO GET THE version route parameter??
// ????
$app->version = $version;
$this->next->call();
}
}所以我想知道如何获取GetVerMiddleware内部的路由参数版本。有可能做到这一点吗?我知道如何打印整个路由(link),但我只对version参数感兴趣。
发布于 2016-02-20 21:05:40
好的,我已经通过一些研究找到了解决方案,下面的链接特别有用:
Slim Framework forum
$app->add(new \GetVerMiddleware());
class GetVerMiddleware extends \Slim\Middleware
{
public function call()
{
$this->app->hook('slim.before.dispatch', array($this, 'onBeforeDispatch'));
$this->next->call();
}
public function onBeforeDispatch()
{
$route_params = $this->app->router()->getCurrentRoute()->getParam('version');
$this->app->version = $version;
}
}我认为解决方案就在那里,很抱歉!
https://stackoverflow.com/questions/35522700
复制相似问题