Zend Regex Route> Отслеживать версию api

Я создаю веб-сервис с zend, и я использую модули для разделения своих api-версий. Пример: «приложения / модули / v1 / контроллеры», «приложения / модули / v2 / контроллеры» имеют различный набор действий и функций.

Я сделал «v1» в качестве модуля по умолчанию в файле «application.ini»:

resources.modules = "" resources.frontController.defaultModule = "v1" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.frontController.moduleControllerDirectoryName = "controllers" 

Я написал следующее в моем файле начальной загрузки:

 $router = $front->getRouter(); $r1 = new Zend_Controller_Router_Route_Regex('api/v1/tags.xml', array('module' => 'v1', 'controller' => 'tags', 'action' => 'index')); $router->addRoute('route1', $r1); 

Предположим, если это мой url: http://localhost/api/v1/tags.xml

то он относится к версии 1 (v1).

Но я не хочу писать много таких маршрутов, как этот, поэтому я хочу знать, как я могу отслеживать версию из urge regex и динамически определять версию api, которая будет использоваться (1 или 2).

попробуй использовать

 $r1->addRoute( 'json_request', new Zend_Controller_Router_Route_Regex( '([^-]*)/([^-]*)/([^-]*)\.xml', array( 'controller' => 'index', 'action' => 'index', 'request_type' => 'xml'), array( 1 => 'module', 2 => 'controller', 3 => 'action' ) )); 

Попробуй это:

 $r1 = new Zend_Controller_Router_Route_Regex('api/(v.*)/tags.xml', array('module' => 'v1', 'controller' => 'tags', 'action' => 'index'), array(1 => 'module') ); 

Это автоматически перезапишет параметр модуля и, следовательно, автоматически переместится в правый модуль. Не нужно больше использовать плагин с методом preDispatch .

До сих пор я пробовал вот так:

 $r1 = new Zend_Controller_Router_Route_Regex('api/v(.*)/tags.xml', array('module' => 'v1', 'controller' => 'tags', 'action' => 'index'), array(1 => 'version') ); $router->addRoute('route1', $r1); 

И я мог бы получить отсюда идею:

Итак, теперь я использовал фронт-контроллер и метод preDispatch, я устанавливаю имя модуля на основе значения, которое я получаю в значении параметра «версия», например

 if($request->getParam('version') == 2 { $request->setModuleName('v2') } 

Но после изменения версии в url до v2 она все равно переходит к действию контроллера в модуле v1.