Zend framework 在routes.ini中设置带有Zend_Rest_路由的路由

Zend framework 在routes.ini中设置带有Zend_Rest_路由的路由,zend-framework,zend-rest-route,Zend Framework,Zend Rest Route,我正在尝试用Zend_Rest_路由构建一个API。 在我的任务模块中,我有3个控制器: ; 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"

我正在尝试用Zend_Rest_路由构建一个API。 在我的任务模块中,我有3个控制器:

; 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"
  • 任务控制器
  • 打字机控制器
  • 状态控制器
我可以通过在my 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控制器(扩展Zend_REST_控制器,使其自动重定向到正确的方法)具有标准的REST方法(indexAction、getAction、putAction、postAction、deleteAction)

  • 任务控制器(Zend_Rest_控制器)
  • 类型控制器(Zend_Rest_控制器)
  • StatusController(Zend_控制器_动作),但模拟为Rest控制器(参见routes.ini)
  • ViewController(Zend_Controller_Action)=>管理与phtml关联的不同php视图
StatusController是Zend_Action_控制器,因为Zend似乎不管理分层REST url(在本例中为/tasks/types/:type_id/status/:id)。我使用checkhttprequest方法转发到正确的操作

以下是所有控制器的my 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,但它有一个问题,而不是

是否可以用以下内容替换路由的两个块:

routes.tasks.type = "Zend_Rest_Route"
routes.tasks.route = "/tasks/:controller/:id"
routes.tasks.defaults.controller = tasks
routes.tasks.defaults.module = tasks
routes.tasks.defaults.id =

您将/:id参数的默认值设置为null,因此如果未设置该参数,则仍会触发路由。

此行看起来可疑:

routes.qtasks.tasks = "tasks"
你是说:

routes.qtasks.action = "tasks"
或:


您可能还需要为
id
参数设置默认值。

Zend似乎要求将路由命名为“rest”,并将模块等属性及其控制器作为值。例如:

routes.rest.type = Zend_Rest_Route
routes.rest.tasks = tasks,types
这样,Tasks\u TasksController和Tasks\u TypesController将成为RESTAPI


仔细检查。

这不起作用。我还尝试放置默认控制器,但在url中出现错误“指定的控制器无效(索引)模块名称(任务)操作名称(索引)”(但仍然有效)控制器中有哪些操作(以及默认操作是什么?),不幸的是,这不起作用:(我更新了我的问题,提供了更多关于控制器和路由的信息。路由是“固定”的还是可以重写使用过的路由?你有点被卡住了。固定是什么意思?如果可以的话,我可以进行更改:)我在文档(和教程)中找到了这一点其中表示添加routes.rest.mod=project,其中mod是模块的用户(mod_ProjectController,等等)。如果我不添加这个(特别是routes.tasktypes.tasks=“types”),我的url不起作用,我给我一个“Action”1不存在,并且没有被困在u call()中我已经设置了一个默认id。现在,这很奇怪。url在任务模块动作索引中重定向到TasksController时起作用(仍然有效,但我猜这是正常的),但不起作用(仍然有效)