php-如何在Symfony中为example.com/username创建路由并保留所有旧URL

目标:

我想要用户名URL,例如Facebook,Twitter等:example.com/Username

问题:

如果添加,则无法访问/ register等URL.

   * @Route("/{user}", name="user_profile")

当然,我可以有/ user / username,但是对于这种情况,我需要/ username.

实施此方法的正确方法是什么?

一种想法是为404页添加事件侦听器,该事件侦听器检查URL是否为example.com/abc并检查用户名是否存在.但这似乎是一个坏习惯.

简短问题:

如何使www.example.com/username之类的路线像Facebook,以专业的方式与/ register等冲突?

解决方法:

首先,您需要定义如何处理/ register,/ login,/ impressum之类的路径以及与这些路径(例如“ register”,“ login”和“ impressum”)冲突的用户名的冲突.您可能想要一个不允许的用户名黑名单,因为它们与您的预定义路径冲突.

为了解决实际的问题,您可以在所有其他路由之后为/ {username}创建一个“ catchall”路由(也许使用正则表达式对{username}部分有一些限制).

当您在symfony项目中请求路径时,symfony将按照定义的顺序检查路径.因此,如果您最后定义了用户配置文件路由(位于routing.yml文件的底部),则仅当所有其他路由均不符合请求时,才使用该路由.
这意味着,如果您的用户名类似于“ register”,则他将无法打开其个人资料页面,因为注册页面的/ register路由将首先与请求匹配.

在Symfony Standard Edition中,路由如下所示:

app:
    resource: '@AppBundle/Controller/'
    type: annotation

您不能使用注释处理路线位置,除非您在routing.yml文件中写入了多个条目.为了确保用户个人资料路由是最后一条,您可能应该删除此操作的注释,并使用yml创建路由,如下所示:

app:
    resource: '@AppBundle/Controller/'
    type: annotation

user_profile:
    path: /{user}
    defaults:
        _controller: App:User:profile
上一篇:《OpenGL ES 3.x游戏开发(上卷)》一导读


下一篇:在linux中使用c检测连接接口