目标:
我想要用户名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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。