“我的网站”允许您创建项目,并且有多种项目类型(如项目模板)。
我想要做的是有一个单独的操作来处理所有项目类型。目前,对于每个项目类型,我都有一个单独的操作和视图。我想把它们都路由到一个单独的操作。
这是我到目前为止想出来的,这是不起作用的。
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-1或http://mysite.com/project/new-2,其中1和2是项目类型I。这两个URL都应该映射到project控制器中名为new的操作。
这样的事情在ZF 1.11中是可能的吗?
发布于 2013-03-07 21:36:58
您所需的URL格式可以通过正则表达式路由轻松实现:
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。
发布于 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。
https://stackoverflow.com/questions/15267975
复制相似问题