iam с помощью zend framework для создания веб-службы REST, и я использую модули для разделения своих api-версий, как я упомянул здесь
Пример: «приложения / модули / v1 / контроллеры», «приложения / модули / v2 / контроллеры» имеют различный набор действий и функций. Я упомянул мой модуль по умолчанию как «v1» в своем приложении application.ini
Я использую контекстное переключение вместе с Regex Routing, как я упомянул здесь в моем принятом решении:
$router->addRoute( 'route1', new Zend_Controller_Router_Route_Regex( 'api/([^-]*)/([^-]*)\.([^-]*)', array( 'controller' => 'index', 'action' => 'index'), array( 1 => 'module', 2 => 'controller', 3 => 'format' ) ));
Это мой url: http: //localhost/api/v1/tags.xml
«v1» указывает модуль. Теперь, перейдя к переключению контекста, если url имеет v1, он будет находиться в модуле TagsController модуля v1. Но если модуль в url равен v2, я получаю ошибку, такую как:
Запрошенный URL /pt/public/index.php/api/v2/tags.xml не найден на этом сервере.
Я не мог понять, почему он взорвался. Это потому, что я поставил модуль по умолчанию как v1? Я не могу изменить модуль на основе URL.
И это мое дерево каталогов:
Моя доброта … я понял решение … имя класса контроллера в модуле v2 должно быть «V2_TagsController», а не только «TagsController». Слава богу, он работает сейчас 🙂 См. Имена классов для контроллеров ниже:
- application - modules - v1 - controllers - TagsController.php (class TagsController) - v2 - controllers - TagsController.php (class V2_TagsController) - library