ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-25 19:40:58  阅读:148  来源: 互联网

标签:symfony routes php routing


目标:

我想要用户名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

标签:symfony,routes,php,routing
来源: https://codeday.me/bug/20191025/1930974.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有