symfony2特殊路由没有其他通配符

时间:2013-03-22 10:26:42

标签: symfony match routes

问题:

需要这样的网址:

wall:
pattern:  /{username}/

但是.. 匹配每个网址,例如/ Messages /,/ Settings /

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

还有其他方法吗? +我也可能需要拒绝注册用户的路由模式?怎么样?

并且我不想添加到网址类似 / User / {username}

2 个答案:

答案 0 :(得分:3)

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

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

基本上,它要求Page(设置,消息等)以大写([A-Z])开头,而页面名称的其余部分并不重要。

对于用户配置文件页面,它们应该以小写字符([a-z])显式启动。

我不知道这是否满足您的要求......

编辑:

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

答案 1 :(得分: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