2

问题:

需要有这样的网址:

wall:
pattern:  /{username}/

但是.. 它匹配每个 url,如 /Messages/、/Settings/

唯一想到的解决方案是检查该用户是否存在......以及是否没有重定向到真实的 /Settings ?但它为每一页选择一个,我不喜欢它。

还有其他方法吗?+ 我可能还需要拒绝使用路由模式注册用户?如何?

不,我不想添加到 /User/{username} 之类的 URL

4

2 回答 2

3

根据我的评论,这可能是一种解决方法:

pages:
    pattern: /{page}/
    requirements:
        page: "(Messages|Settings|SomeOtherPage|YetAnotherPage)"
wall:
    pattern:  /{username}/

基本上,它要求页面(设置、消息等)以大写字母 ([AZ]) 开头,页面名称的其余部分并不重要。

至于用户个人资料页面,它们应该明确地以小写字符 ([az]) 开头。

不知道能不能满足你的要求……

编辑:

这实际上是@tomas.pecserke 的简化解决方案。我刚刚编辑了路由,因此所有页面都在单个路由中枚举。

于 2013-03-22T11:04:47.417 回答
0

我强烈建议不要使用这种方法。您应该明确地为路线添加前缀。但是如果一定要这样的话,可以先指定其他路由。RouteMatcher 选择与模式匹配的第一个路由。

# src/Acme/DemoBundle/Resources/routing.yml
account:
    pattern: /account
    defaults: # ...
some_other_route:
    pattern: /some_other_route
    defaults: # ...
wall:
    pattern: /{username}/
    defaults: # ...
    # you can set requirements
    requirements:
        username: [a-z0-9]+ # regular expression
于 2013-03-22T11:00:25.150 回答