在Symfony中,如何从浏览器中的uri中删除查询字符串

时间:2016-03-04 19:19:14

标签: php symfony symfony-2.8

在我的多语言Symfony(2.8)应用程序中,我有许多视图使用ajax注入主页面。基于此article,我实现了一个区域设置监听器,因此区域设置是粘性的。

我发现当主页面打开时退出并重新启动浏览器(Safari) - 当前区域设置不是默认值 - 下一个request的当前区域设置失去了,因为现在没有以前的会议。返回ajax链接中的视图时,语言环境将设置为默认值,从而生成包含混合语言的页面。

作为一种解决方法,我将当前语言环境作为查询包含在所有ajax链接上,并且我已经劫持了语言环境侦听器,现在可以从查询中设置request上的语言环境,即使在所描述的情况下也是如此上方。

它似乎可以完成这项工作。然而,缺点是我现在留下了包含查询字符串的丑陋网址,例如: www.domain.co.uk/es/moreinfo?_locale=es

我一直在尝试实现另一个侦听器,从uri中剥离查询。侦听器检测到查询并可以从request->query参数和$_SERVER全局变量中删除它,但是当视图返回浏览器时,我尝试的任何内容都不会更改。

我也尝试过使用新路由,这些路由会解析并转发或重定向到不同的路由/路径,但浏览器中的网址仍然保持不变。

有任何想法或建议吗?

我是从错误的角度来看待这个问题 - 即我应该尝试在客户端而不是服务器端进行此操作吗?

1 个答案:

答案 0 :(得分:0)

正如我所看到的,您的网址中还指定了一个区域设置:{url}/{_locale}/moreinfo...

这是正确的本地化方法。您现在唯一需要的是在您的网址中将Symfony区域设置为_locale slug。正如您可能猜到的那样,_locale查询参数是多余的。

请参阅此SO问题以获得完整的解决方案。