首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend框架动态动作名称路由

Zend框架动态动作名称路由
EN

Stack Overflow用户
提问于 2013-03-07 17:52:15
回答 2查看 815关注 0票数 0

“我的网站”允许您创建项目,并且有多种项目类型(如项目模板)。

我想要做的是有一个单独的操作来处理所有项目类型。目前,对于每个项目类型,我都有一个单独的操作和视图。我想把它们都路由到一个单独的操作。

这是我到目前为止想出来的,这是不起作用的。

代码语言:javascript
复制
resources.router.routes.new_project.route = "/project/new-:id"
resources.router.routes.new_project.defaults.controller = "project"
resources.router.routes.new_project.defaults.module = "site"
resources.router.routes.new_project.defaults.action = "new"
resources.router.routes.new_project.reqs.id = "([0-9]+)"

因此,我希望我的URL看起来像http://mysite.com/project/new-1http://mysite.com/project/new-2,其中1和2是项目类型I。这两个URL都应该映射到project控制器中名为new的操作。

这样的事情在ZF 1.11中是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-07 21:36:58

您所需的URL格式可以通过正则表达式路由轻松实现:

代码语言:javascript
复制
resources.router.routes.new_project.type = "Zend_Controller_Router_Route_Regex"
resources.router.routes.new_project.route = "project/new-(\d+)"
resources.router.routes.new_project.defaults.controller = "project"
resources.router.routes.new_project.defaults.module = "site"
resources.router.routes.new_project.defaults.action = "new"
resources.router.routes.new_project.map.1 = "project_type_id"
resources.router.routes.new_project.reverse = "project/new-%s"

然后,您可以在控制器中使用$this->_getParam('project_type_id')访问该ID。

票数 2
EN

Stack Overflow用户

发布于 2013-03-07 20:36:26

看起来您不能将URL变量指定为部分-它们必须占据整个段(段由/分隔)-也就是说,第一个字符必须是:,名称则是值的其余部分。

参见Zend/Controller/Router/Route.php中的函数__construct (第158行..196行)-它只检查substr($part, 0, 1)是否与:匹配(而不是在段内的任何位置查找它)。

我认为这意味着你需要在Zend中使用/project/new/:id来使用相同的操作--你可以潜在地在Apache中使用mod_rewrite让像/project/new-(\d+)这样的URL呈现给用户,但是重写为Zend的/project/new/$1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15267975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档