symfony2特殊路线通配符无其他内容

symfony2特殊路线通配符无其他内容,symfony,match,routes,Symfony,Match,Routes,问题: 需要有如下URL: wall: pattern: /{username}/ 但是。。它匹配每个url像/Messages/,/Settings/ 我想到的唯一解决办法就是检查这个用户是否存在。。。如果没有重定向到真实/设置?但是每页只有一个选择,我不喜欢 还有别的办法吗?+我可能还需要用路由模式注册用户?怎么做 不,我不想在URL中添加类似/User/{username}的内容,我强烈建议不要使用这种方法。你应该明确地给路线加上前缀。但如果必须这样做,可以先指定其他路由。RouteM

问题:

需要有如下URL:

wall:
pattern:  /{username}/
但是。。它匹配每个url像/Messages/,/Settings/

我想到的唯一解决办法就是检查这个用户是否存在。。。如果没有重定向到真实/设置?但是每页只有一个选择,我不喜欢

还有别的办法吗?+我可能还需要用路由模式注册用户?怎么做


不,我不想在URL中添加类似/User/{username}

的内容,我强烈建议不要使用这种方法。你应该明确地给路线加上前缀。但如果必须这样做,可以先指定其他路由。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

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

pages:
    pattern: /{page}/
    requirements:
        page: "(Messages|Settings|SomeOtherPage|YetAnotherPage)"
wall:
    pattern:  /{username}/
基本上,它要求页面(设置、消息等)以大写([A-Z])开头,页面名称的其余部分并不重要

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

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

编辑:


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

这似乎是不可能的。考虑到有一天你可能会创建一个名为“销售”的页面,你的用户数据库可以包含名为“Sales”的用户。您需要在模式中添加一些前缀(或后缀),以便能够将普通页面与用户配置文件区分开来。。。但是让我们说我会照顾它。。。我如何解决我今天的问题?好的,我想我看到了一个可能的模式。每个“页面”都以大写字母开头,所以你能将用户名限制为仅小写字母,或者至少以小写字母开头吗?嗯。。。是的,我想我可以用first-leeter作为大写(/Messages,/Settings,)和像/james/trki/jperovic这样的用户名来创建所有普通页面,但是。。。我能在路线上转换它吗?因为如果用户输入server.com/JPEROVIC会发生什么?路由文件能否以某种方式将其转换为server.com/jperovic?我认为没有办法进行这种转换。你能在注册过程中悄悄地执行转换吗?嗯。。。首先:InvalidArgumentException:“用户名”的路由要求必须是字符串。即使这样做似乎还可以,要求用户输入地址小写字母,比如/jperovic?我想。。。我甚至不需要提出这些要求。我可以把所有的页面放在前面。然后将出现{username}路由,很容易出现/Trki或/Trki,它将与页面不匹配+当我创建新页面时,我将只“使用此用户名注册新用户”。你说呢?我已经编辑了路线,但是在这种情况下,你已经在路线要求中列出了所有可能的页面。这是一些不太灵活的方法,但它确实起到了作用。这个解决方案实际上是@tomas.pecserke在他的回答中给出的一个简化方案……至于
无效argumentexception
,我认为您需要引用regexyou是对的,但当我添加墙路由的要求并且在/Messages路由后面时,它仍然匹配它。。所以我删除了要求。。。墙仍在消息路由后面,当我访问/消息时,它可以工作。。所以我会注册用户名“消息”等我只有几页没有问题。。。那么这应该很有效,对吗?因为我会有唯一的名字。但我仍然想问,你的路由页面有什么好的模式/{page}和枚举所有页面?嗯。。是的,我会把它们放在最前面。。对于其他人,必须引用reg exp