这个问题在很多时候出现在这里很常见,但Symfony2框架却没有。我想创建一个路径,在域之后直接使用用户名来访问用户配置文件,例如:domain.com/username
。 Rout应该是:
Profile:
pattern: /{pseudo}
defaults: { _controller: **Bundle:Default:member }
然而很明显,这次溃败还有很多其他溃败,比如/main
,太糟糕了。文档说我们可以对模式进行一些限制,比如使伪成为En或Fr:
Profile:
pattern: /{pseudo}
requirements:
pseudo: en|fr
我可能会使用它来使伪不等于其他类似的路径,如main , messages , post , blog
,但我也有很多路径,路由器看起来很难看。如果这是一种有效的方式,请说明如何不等于 main, messages,...
或者还有另一种方式,我会很感激地知道它。
答案 0 :(得分:3)
您可能不应该在路由级别上限制它,而是在用户注册过程中。如果您将/{pseudo}
路径放在之后的所有其他路线(例如/main
或/messages
路线),则该模式仅匹配与任何路线不匹配的所有请求你的其他路线。
e.g。
main:
pattern: /main
defaults: { _controller: YourBundle:Main:show }
% put all the other routes here
% your very last route
pseudo:
pattern: /{pseudo}
defaults: { _controller: YourBundle:User:show }
您还可以向最后一条路线添加一项要求,仅包含例如8个字符,只有字母数字值或您喜欢的正则表达式。
requirements:
pattern: ^\[a-z0-9]{,8}$
但是,如果您确实希望通过需求限制访问,则可以添加一个不允许某些名称的需求正则表达式。尽管如此,我强烈建议不要:
requirements:
pattern: ^(?!main|messages|...)$
中也对此进行了详细说明