3

我们正在 ZF1 Web 应用程序中设置 Rest API,并且在配置路由时遇到问题。

这个想法是在 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 操作,但如果我们想访问自定义操作,逻辑上还不能正常工作,而且我们无法找到一种方法来做到这一点。

我们尝试了几个选项,例如使用 aZend_Controller_Router_Route_Regex来定义路线,但均未成功;addRoute()或在 Bootstrap 中手动添加自定义路由。

有人有想法吗?经过我们花时间研究,到目前为止,ZF1 似乎无法让我们设置适当的 Rest API ......

4

0 回答 0