0

我正在编写 API 的新版本,并希望通过为每个版本设置不同的控制器集来支持旧版本。在 Lithium 中的默认“app\controllers”路径中,我希望有例如“v1”和“v2”路径。

我尝试通过执行以下操作在路线本身内完成此操作:

 Router::connect('/{:version}/{:controller}/{:action}{:args}', array(
        'controller'=> '\app\controllers\{:version}\{:controller}Controller',
    ), array());

然后我尝试通过执行以下操作来覆盖库引导模块中的路径:

if( preg_match('/^\/(v[0-9\.]+)/', $_SERVER['REQUEST_URI'], $match) ) {
    Libraries::paths(array(
        'controllers' => "controllers\\".$match[1].'\\{:name}Controller',
        'models' => "models\\".$match[1]."\\{:name}",
    ));
}

我花了大约半天的时间搜索谷歌和非常稀疏的锂文档。我不确定我们使用的是什么版本的 Lithium,因为我已经进入了这个预先存在的代码库。

感谢您提供的任何提示!

4

1 回答 1

2

在您的 routes.php 文件中,您应该重新配置 Dispatcher 默认规则

Dispatcher::config(array('rules' => array(
  'v1' => array('controller' => 'app\controllers\v1\{:controller}Controller')
)));

和匹配 /v1/... 请求的延续路由

Router::connect('/v1/{:args}', array('v1' => true), array(
  'continue' => true, 'persist' => array('controller', 'v1')
));

如果需要,您可以轻松地使用:version而不是预定义的版本号。

于 2012-09-05T22:05:24.817 回答