我的网站允许您创建项目,并且有多种项目类型(如项目模板)。
我想做的是有一个单一的操作处理所有的项目类型。目前,对于每个项目类型,我都有一个单独的操作和视图。我想把它们都路由到一个动作
这是我到目前为止想出的方法,这行不通。
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是项目类型id。这两个url都应该映射到project
控制器中称为new
的操作。
像这样的东西可能在ZF 1.11?
您想要的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
看起来您不能将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
。