0

我有几个网址:

  • /戴夫
  • /达维娜
  • /戴夫/克里斯
  • /达维娜/彼得

我的路线中有所有这些条目,例如:

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

我认为您可以立即看到我有重复问题。有没有办法将多个网址组合成一条路线?

我玩过使用 /:person 但我也有其他内容也不会去人控制器。

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|etc" 还是有另一种神奇的 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)"

我将暂时使用它来满足我的要求,但我会保持开放状态(至少一天)供任何人提供建议。主要问题是这两个列表都会增长,这最终会导致问题。

4

1 回答 1

1

我想我可能有答案。

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

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

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

url=/about
match route "/about"

url=/david/parker
match route "/:person/:personname"
not "/about" or "/contact"
于 2013-03-27T01:08:03.020 回答