Zend Regex>路由模块问题

sha*_*nth 5 php zend-framework

我使用zend框架来构建REST Web服务,我正在使用模块来分离我的api版本,正如我在这里提到的那样

例如:"applications/modules/v1/controllers","applications/modules/v2/controllers"具有不同的操作和功能集.我在application.ini中提到了我的默认模块"v1"

我使用的上下文正如我刚才所说随着正则表达式路由交换这里我接受的解决方案:

$router->addRoute(
            'route1',
            new Zend_Controller_Router_Route_Regex(
                                            'api/([^-]*)/([^-]*)\.([^-]*)', 
                                            array(
                                                'controller'   => 'index',
                                                'action'       => 'index'),
                                            array(
                                                1 => 'module',
                                                2 => 'controller',
                                                3 => 'format'
                                            )
));
Run Code Online (Sandbox Code Playgroud)

这是我的网址:http://localhost/api/v1/tags.xml

"v1"表示模块.现在,进入上下文切换,如果url有v1,它将转到v1模块的TagsController.但是如果url中的模块是v2,我会收到如下错误:

在此服务器上找不到请求的URL /pt/public/index.php/api/v2/tags.xml.

我无法理解为什么它会炸毁.是因为我把默认模块设为v1吗?我无法根据网址更改模块.

这是我的目录树:

  • 应用
    • 模块
      • V1
        • 控制器
          • TagsController.php
      • V2
        • 控制器
          • TagsController.php
  • 图书馆

sha*_*nth 3

天哪...我已经找到了解决方案... v2 模块中的控制器类名称必须是“V2_TagsController”,而不仅仅是“TagsController”。感谢上帝,它现在可以工作了:) 请参阅下面的控制器类名称:

- application
      - modules
         - v1
            - controllers
                  - TagsController.php (class TagsController)
         - v2
            - controllers
                  - TagsController.php (class V2_TagsController)
- library
Run Code Online (Sandbox Code Playgroud)