Php 如何在Slim中从顶级中间件中找到路由参数
我正在尝试对我使用Slim框架编写的API进行API版本控制 我的所有版本化API如下所示:Php 如何在Slim中从顶级中间件中找到路由参数,php,slim,middleware,Php,Slim,Middleware,我正在尝试对我使用Slim框架编写的API进行API版本控制 我的所有版本化API如下所示: $app->get('/:version/book/search', function() {...}); 我正在尝试为此版本创建应用程序范围的路由条件,如下所示: \Slim\Route::setDefaultConditions(array( 'version' => 'v[3-6]' )); 因此,应该只允许版本号为v3、v4、v5和v6的API获得它 我的要求是在$app
$app->get('/:version/book/search', function() {...});
我正在尝试为此版本创建应用程序范围的路由条件,如下所示:
\Slim\Route::setDefaultConditions(array(
'version' => 'v[3-6]'
));
因此,应该只允许版本号为v3、v4、v5和v6的API获得它
我的要求是在$app->version中存储API调用的确切版本,然后根据需要更改特定于版本的代码。我已经创建了一个中间件,并将其添加到$app本身中,以便为每个API调用执行该中间件:
$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();
}
}
所以我想知道如何在GetVeridware中获取路由参数版本。有可能做到吗?我知道如何打印整个路线(),但我只对version参数感兴趣 好的,经过一些研究,我找到了解决方案,下面的链接特别有用:
我想解决办法差不多就在那里,抱歉 好的,经过一些研究,我找到了解决方案,下面的链接特别有用: 我想解决办法差不多就在那里,抱歉
$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;
}
}