php - Symfony2 : Username in URL

标签 php model-view-controller symfony routing

这个问题很常见,在这里出现了很多次,但不是针对 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/

相关文章:

Symfony PHPUnit - 注入(inject)依赖项

javascript - Ajax 未提交给 PHP

php - 创建一个 3 列的 wordpress 标题

javascript - 无法加载带有数据的选项卡式页面

objective-c - iOS MVC : where does the model fit-in to a CoreData application?

php - Codeigniter - 让我的 Controller 更干

android - Android 设备 Web 服务 SYMFONY 3 的连接被拒绝

php - 流式 ZIP 文件无法在 OSX 中打开

php - 我想做一个论坛

php - 迁移数据库模式时出现 MySQL 错误,Doctrine with Symfony