Zend framework Zend router:将URL列表合并为单个或多个URL列表

Zend framework Zend router:将URL列表合并为单个或多个URL列表,zend-framework,zend-router,Zend Framework,Zend Router,我有几个网址: /戴夫 /戴维娜 /戴夫/克里斯 /戴维娜/彼得 我的路线中有所有这些路线的条目,例如: routes.dave.route = /dave routes.dave.defaults.module = default routes.dave.defaults.controller = person routes.rcp.defaults.action = index routes.davina.route = /dave/chris routes.davina.defaul

我有几个网址:

  • /戴夫
  • /戴维娜
  • /戴夫/克里斯
  • /戴维娜/彼得
我的路线中有所有这些路线的条目,例如:

routes.dave.route = /dave
routes.dave.defaults.module = default
routes.dave.defaults.controller = person
routes.rcp.defaults.action = index

routes.davina.route = /dave/chris
routes.davina.defaults.module = default
routes.davina.defaults.controller = person
routes.davina.defaults.action = index
我想你可以马上看到我有一个重复的问题。有没有一种方法可以将多个URL合并到一个路由中

我已经尝试过使用/:person,但我也有其他内容,而不是person controller

routes.person.route = /:personname
routes.person.defaults.module = default
routes.person.defaults.controller = person
routes.person.defaults.action = index
routes.person.reqs.personname = "^[a-zA-Z0-9]+$"
像/search?person=dave这样的URL会转到搜索控制器,这显然会被上面的表达式杀死

我能把这个要求列成一个清单吗?“dave | davina |等”或者有没有另一种神奇的zend方法

更新: 我在玩游戏时遇到了这个局部解决方案:

routes.person.route = /:personname
routes.person.defaults.module = default
routes.person.defaults.controller = person
routes.person.defaults.action = index
routes.person.reqs.personname = "(dave|davina)"

routes.person.route = /:person/:personname
routes.person.defaults.module = default
routes.person.defaults.controller = person
routes.person.defaults.action = index
routes.person.reqs.personname = "(chris|peter)"

我打算暂时使用它,因为它满足了我的要求,但我会让它公开(至少一天)给任何人提供建议。主要的问题是,这两个列表都会增长,最终会引起问题。

我想我可能有一个答案

在ZF中,路由按相反顺序匹配。因此,最后定义的路由是第一个匹配的路由

在这种情况下,您应该定义您的
/:person/:personname
路由,然后定义其他静态路由,如关于页面、联系人页面等

如果我正确理解Zend,它应该会工作。这样做很清楚:

url=/about
match route "/about"

url=/david/parker
match route "/:person/:personname"
not "/about" or "/contact"