Мы устанавливаем API отдыха в веб-приложении ZF1, и у нас возникают проблемы при настройке маршрутов.
Идея состоит в том, чтобы иметь глобальную конфигурацию в application.ini, которая включает в себя «классические» маршруты Rest и дополнительные действия.
Это означает, что мы хотим, чтобы базовые операции CRUD были такими:
GET /user/1
POST /user
PUT /user/1
DELETE /user/1
Но также пользовательские действия, такие как:
GET /user/findBySomething
На данный момент маршруты нашего приложения определены в application.ini следующим образом:
resources.router.routes.app.type = "Zend_Controller_Router_Route_Hostname"resources.router.routes.app.route = ":module.myApp.com"resources.router.routes.app.defaults.module = "app"resources.router.routes.app.chains.default.type = "Zend_Controller_Router_Route"resources.router.routes.app.chains.default.route = ":lang/:@controller/:@action/*"resources.router.routes.app.chains.default.defaults.lang = "fr"resources.router.routes.app.chains.default.defaults.controller = "index"resources.router.routes.app.chains.default.defaults.action = "index"
Мы хотим другую конфигурацию для нашего API, пока у нас есть это:
resources.router.routes.api.type = "Zend_Controller_Router_Route_Hostname"resources.router.routes.api.route = ":module.myApp.com"resources.router.routes.api.defaults.module = "api"resources.router.routes.api.chains.default.type = "Zend_Controller_Router_Route"resources.router.routes.api.chains.default.route = ":lang/:@controller/*"resources.router.routes.api.chains.default.defaults.lang = "fr"resources.router.routes.api.chains.default.defaults.controller = "index"resources.router.routes.api.chains.default.defaults.action = "index"
И мы отлавливаем запрос в абстрактном контроллере API и определяем, какой метод вызывать, в зависимости от HTTP-метода запроса.
Это хорошо работает для базовых операций CRUD, но логически не будет работать, если мы хотим получить доступ к пользовательскому действию, и мы не можем найти способ сделать это.
Мы безуспешно попробовали несколько вариантов, таких как использование Zend_Controller_Router_Route_Regex
определить маршруты; или добавление вручную пользовательских маршрутов с addRoute()
в начальной загрузке.
У кого-нибудь есть идея? После того времени, которое мы потратили на исследования, похоже, что ZF1 не может позволить нам настроить надлежащий Rest API …
Задача ещё не решена.
Других решений пока нет …