3

这个问题很常见,在这里出现了很多次,但对于 Symfony2 框架却不是。我想创建一个路由,直接在域之后使用用户名来访问用户配置文件,如下所示:domain.com/username. 路线应该是:

Profile:
    pattern: /{pseudo}
    defaults: { _controller: **Bundle:Default:member } 

但是很明显,这种溃败会像其他溃败一样/main,太糟糕了。文档说我们可以对模式进行一些限制,例如将伪设置为精确的 En 或 Fr:

Profile:
    pattern: /{pseudo}
    requirements:
        pseudo:  en|fr

我可以用它来使伪不等于其他类似main , messages , post , blog的路由,但我也有很多路由,路由器看起来很难看。如果这是一种有效的方式,请展示如何使要求不等于 main, messages,... 或有另一种方式,我会很感激知道它。

4

1 回答 1

3

您可能不应将其限制在路由级别,而应限制在用户注册过程中。如果您将/{pseudo}路由放在所有其他路由(如您的/main/messages路由)之后,则该模式仅匹配与您的任何其他路由不匹配的所有请求。

例如

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

这在文档中也有详细说明。

于 2012-08-01T10:22:13.547 回答