【问题标题】:How to find the route param from the top level middleware in Slim如何从 Slim 中的顶级中间件中找到路由参数
【发布时间】:2016-06-02 01:16:18
【问题描述】:

我正在尝试完成我使用 Slim 框架编写的 API 的 API 版本控制。

我所有的版本化 API 如下所示:

$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();

    }
}

所以我想知道如何获取GetVerMiddleware里面的路由参数版本。甚至有可能得到那个吗?我知道如何打印整个路线(link),但我只对版本参数感兴趣。

【问题讨论】:

    标签: php slim middleware


    【解决方案1】:

    好的,经过一番研究,我找到了解决方案,以下链接特别有帮助:

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

    我认为解决方案已经差不多了,抱歉!

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 2018-09-11
      • 2016-06-01
      • 2016-07-04
      • 2016-03-05
      • 1970-01-01
      相关资源
      最近更新 更多