我正在编写新版本的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,因为我已经进入了这个预先存在的代码库。
感谢您提供的任何提示!
答案 0 :(得分: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
而不是预定义的版本号。