2012-08-16 111 views
0

我有一个基于模块的zend应用程序。我试图根据定义的版本号(param)适当地路由模块,即。 domain.com/api/v1。Zend自定义路由,仅带参数名称,没有值

我的应用程序看起来像这样

-application 
... 
--modules 
----default 
----api 
----api2 
... 

我在我的引导路由器正确的路由,但到默认模块,“API”。

$frontController = Zend_Controller_Front::getInstance(); 

    $router = $frontController->getRouter(); 

    $route = new Zend_Controller_Router_Route(
        'api/:apiversion/:controller/:action/*', 

        array('module' => 'api', 
         'apiversion' => ':apiversion', 
         'controller' => ':controller', 
         'action' => ':action') 
    ); 

    $router->addRoute('api', $route); 

如何根据我路径上的apiversion PARAM, 'V1', 'V2'?

domain.com/api/v2/users/id/5 => /api2/users/id/5 

是的我明白,我可以让用户输入domain.com/api2/ ... - 不是我想要的。

- 是我明白我可以让用户输入domain.com/api/version/2 ... - 不是我想要的。

我只会做那些如果我想要的东西无法实现的。谢谢:)

我想我可以做一个 - > getParam(“V1”),看它是否存在,然后设置相应模块,除非有一个漂亮的,动态的方式

回答

1

什么做这样的事情:

$frontController = Zend_Controller_Front::getInstance(); 

$router = $frontController->getRouter(); 

$route = new Zend_Controller_Router_Route(
      'api/v1/:controller/:action/*', 

      array('module' => 'api', 
       'apiversion' => 'v1', 
       'controller' => ':controller', 
       'action' => ':action') 
); 

$router->addRoute('api', $route); 
$route2 = new Zend_Controller_Router_Route(
      'api/v2/:controller/:action/*', 

      array('module' => 'api2', 
       'apiversion' => 'v2', 
       'controller' => ':controller', 
       'action' => ':action') 
); 

$router->addRoute('api2', $route2); 

问候

mimiz

+0

哼。首先尝试了几乎类似的东西,但是我得到了api:v1资源未找到问题(ACL已实施)。但现在它正在工作:p – steve 2012-08-16 20:49:30

+0

此外,试图去寻找一个通用的版本路线,而没有定义版本号,但这将工作。 – steve 2012-08-16 20:50:37