我正在尝试使用 Zend_Rest_Route 构建一个 API。在我的任务模块中,我有 3 个控制器:
- 任务控制器
- 类型控制器
- 状态控制器
我可以通过在我的 routes.init 中设置它来访问我的任务控制器
routes.qtasks.type = "Zend_Rest_Route"
routes.qtasks.route = "/tasks/:id"
routes.qtasks.defaults.module = "tasks"
routes.qtasks.defaults.controller = "tasks"
routes.qtasks.tasks = "tasks"
routes.tasktypes.type = "Zend_Rest_Route"
routes.tasktypes.route = "tasks/types/:id"
routes.tasks.defaults.module = "tasks"
routes.tasktypes.defaults.controller = "types"
routes.tasktypes.tasks = "types"
但是,我可以访问我的任务/类型、任务/类型/1 等,但要访问我的任务控制器,我必须使用 url /tasks/tasks/1,即使我设置了路由 =“/tasks”。我应该能够通过 /tasks/1 访问它 为什么这不能按预期工作?(当我将它与 Zend_Controller_Router_Route_Regex 一起使用时,它工作得非常好)。
更新:我的模块中有 4 个控制器(一些 REST,一些正常) 我的 REST 控制器(扩展 Zend_Rest_Controller 因此它自动重定向到正确的方法)具有标准的 REST 方法(indexAction、getAction、putAction、postAction、deleteAction)
- 任务控制器 (Zend_Rest_Controller)
- 类型控制器 (Zend_Rest_Controller)
- StatusController (Zend_Controller_Action) 但模拟为 Rest Controller(参见 routes.ini)
- ViewController (Zend_Controller_Action) => 管理与 phtml 相关的不同 php 视图
StatusController 是 Zend_Action_Controller 因为 Zend 似乎不管理分层 REST url(在本例中为 /tasks/types/:type_id/status/:id)。我使用我的 checkhttprequest 方法转发到正确的操作。
这是所有控制器的 routes.ini :
; task views
routes.tasksindex.type = "Zend_Controller_Router_Route_Regex"
routes.tasksindex.route = "tasks/view"
routes.tasksindex.defaults.controller = "view"
routes.tasksindex.defaults.module = "tasks"
routes.tasksindex.defaults.action = "index"
routes.tasksviews.type = "Zend_Controller_Router_Route_Regex"
routes.tasksviews.route = "tasks/view/(\d+)"
routes.tasksviews.defaults.controller = "view"
routes.tasksviews.defaults.module = "tasks"
routes.tasksviews.defaults.action = "view"
routes.tasksviews.map.1 = "id"
routes.tasksadmin.type = "Zend_Controller_Router_Route_Regex"
routes.tasksadmin.route = "tasks/admin"
routes.tasksadmin.defaults.controller = "view"
routes.tasksadmin.defaults.module = "tasks"
routes.tasksadmin.defaults.action = "admin"
; tasks REST API
routes.tasks.type = "Zend_Rest_Route"
routes.tasks.route = "tasks/:id"
routes.tasks.defaults.module = "tasks"
routes.tasks.defaults.controller = "tasks"
routes.tasks.tasks = "tasks"
; task types REST API
routes.tasktypes.type = "Zend_Rest_Route"
routes.tasktypes.route = "tasks/types/:id"
routes.tasktypes.defaults.module = "tasks"
routes.tasktypes.defaults.controller = "types"
routes.tasktypes.tasks = "types"
; task type status Simulated REST API
routes.taskstypestatus.type = "Zend_Controller_Router_Route_Regex"
routes.taskstypestatus.route = "tasks/types/(\d+)/status/?([0-9]+)?"
routes.taskstypestatus.defaults.controller = "status"
routes.taskstypestatus.defaults.module = "tasks"
routes.taskstypestatus.defaults.action = "checkhttprequest"
routes.taskstypestatus.map.1 = "type_id"
routes.taskstypestatus.map.2 = "id"
注意:/TypesController.php 和 StatusController.php 工作。我只有 TasksController 有问题,我希望它可以作为http://demo.localhost/tasks而不是http://demo.localhost/tasks/tasks/ 访问