这个问题很常见,在这里出现了很多次,但不是针对 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,...
或者还有另一种方法,我会很高兴知道它。
最佳答案
您可能不应该在路由级别上限制它,而应该在用户注册过程中限制它。如果您将 /{pseudo}
路由放置在所有其他路由之后(例如您的 /main
或 /messages
route) 该模式只匹配所有不匹配任何其他路由的请求。
例如
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 中也有详细解释。 .
关于php - Symfony2 : Username in URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11757152/