Symfony2:URL中的用户名

时间:2012-08-01 10:16:57

标签: php model-view-controller symfony routing

这个问题在很多时候出现在这里很常见,但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,... 或者还有另一种方式,我会很感激地知道它。

1 个答案:

答案 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|...)$ 

documentation

中也对此进行了详细说明