Php GenerateUrl不遵守Symfony4.4中的本地化路线 介绍
我正在Php GenerateUrl不遵守Symfony4.4中的本地化路线 介绍,php,symfony,routes,internationalization,symfony4,Php,Symfony,Routes,Internationalization,Symfony4,我正在windows10prohost(开发机器)上使用:symfonyv4.4.13 在我的项目中,我正在编写搜索模块 我已设置本地化路由:en/ru 要求 如果用户输入俄语搜索词,我想将语言环境从英语切换到俄语 问题 此时我发现一个错误: 找不到“GET/ru/search/%D1%82%D0%B5%D1%81%D1%82”(从)的路由https://127.0.0.1:8000/en/search“” 正如在错误中所看到的那样-之所以发生这种情况,是因为它没有将搜索关键字转换为ПццСц关
windows10pro
host(开发机器)上使用:symfonyv4.4.13
在我的项目中,我正在编写搜索模块
我已设置本地化路由:en/ru
要求
如果用户输入俄语搜索词,我想将语言环境从英语切换到俄语
问题
此时我发现一个错误:
找不到“GET/ru/search/%D1%82%D0%B5%D1%81%D1%82”(从)的路由https://127.0.0.1:8000/en/search“”
正如在错误中所看到的那样-之所以发生这种情况,是因为它没有将搜索
关键字转换为ПццСц
关键字
只有用户输入的搜索词
被转发到下一页。从商品搜索词
到商品搜索词
,本地化路径似乎没有被考虑在内
URL应该是:“/ru/%D0%BF%D0%be%D0%B8%D1%81%D0%BA/%D1%82%D0%B5%D1%81%D1%82”
witch翻译成utf8“/ru/ПццСц/Сццц”
,而不是“/ru/search/Сццццц代码>
代码
最后
我是遇到了一个bug(edge案例)还是我的配置有误
谢谢你的建议
更新1
请注意,回退区域设置设置为EN
我打开页面https://127.0.0.1:8000/en/search
李>
然后在表单搜索输入字段中,我输入俄语文本:СССС
,然后点击回车键李>
我希望自动重定向到俄罗斯地区
(因为文本是西里尔文)并获得搜索结果
但是我得到的是“/ru/SEARCH/СССССС/ССССС”而不是”
李>
更新2
我在一个全新的项目上测试了它,我想我发现了问题
请参阅更新的代码:
您可以看到,我已经修改了您使用和初始化term
变量的方式,这是问题的一部分
现在我得到这个结果:
[Web Server/PHP ] Sep 25 22:46:53 |INFO | SERVER GET (302) /en/search/%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 22:46:59 |INFO | SERVER GET (200) /ru/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA/%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 23:40:51 |INFO | SERVER GET (302) /en/search?term=%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 23:40:58 |INFO | SERVER GET (200) /ru/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA?term=%D1%82%D0%B5%D1%81%D1%82
但当您使用表单提交输入时,我猜您希望将变量传递到请求中。因此,我修改了您的代码,使其使用请求参数:
我得到这个结果:
[Web Server/PHP ] Sep 25 22:46:53 |INFO | SERVER GET (302) /en/search/%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 22:46:59 |INFO | SERVER GET (200) /ru/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA/%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 23:40:51 |INFO | SERVER GET (302) /en/search?term=%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 23:40:58 |INFO | SERVER GET (200) /ru/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA?term=%D1%82%D0%B5%D1%81%D1%82
转换为UTF 8,给出:
[Web Server/PHP ] Sep 25 23:40:51 |INFO | SERVER GET (302) https://127.0.0.1:8000/en/search?term=тест
[Web Server/PHP ] Sep 25 23:40:58 |INFO | SERVER GET (200) https://127.0.0.1:8000/ru/поиск?term=тест
我在一个全新的项目上测试了它,我想我发现了问题
请参阅更新的代码:
您可以看到,我已经修改了您使用和初始化term
变量的方式,这是问题的一部分
现在我得到这个结果:
[Web Server/PHP ] Sep 25 22:46:53 |INFO | SERVER GET (302) /en/search/%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 22:46:59 |INFO | SERVER GET (200) /ru/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA/%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 23:40:51 |INFO | SERVER GET (302) /en/search?term=%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 23:40:58 |INFO | SERVER GET (200) /ru/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA?term=%D1%82%D0%B5%D1%81%D1%82
但当您使用表单提交输入时,我猜您希望将变量传递到请求中。因此,我修改了您的代码,使其使用请求参数:
我得到这个结果:
[Web Server/PHP ] Sep 25 22:46:53 |INFO | SERVER GET (302) /en/search/%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 22:46:59 |INFO | SERVER GET (200) /ru/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA/%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 23:40:51 |INFO | SERVER GET (302) /en/search?term=%D1%82%D0%B5%D1%81%D1%82
[Web Server/PHP ] Sep 25 23:40:58 |INFO | SERVER GET (200) /ru/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA?term=%D1%82%D0%B5%D1%81%D1%82
转换为UTF 8,给出:
[Web Server/PHP ] Sep 25 23:40:51 |INFO | SERVER GET (302) https://127.0.0.1:8000/en/search?term=тест
[Web Server/PHP ] Sep 25 23:40:58 |INFO | SERVER GET (200) https://127.0.0.1:8000/ru/поиск?term=тест
错误实际上在前端。Ajax调用没有本地化,总是为英语语言环境调用URL。错误实际上在前端。Ajax调用没有本地化,始终调用英语语言环境的URL。如何在应用程序中请求它?据我所知,你仍然必须调用与你的控制器相关的正确URL(或者/en/search或者/ru/ПбС椦)。如果在你的前端应用程序中调用/ru/search,Symfony显然不知道如何回答。更新1中描述了我的工作流程。URL是在后端形成的(参见更新2).URL被修改为将区域设置设置为ru
,并从GET添加搜索词
。您如何在应用程序中请求它?据我所知,您仍然需要调用与控制器关联的正确URL(可以是/en/search,也可以是/ru/Пааimk_)。如果在前端应用程序中调用/ru/search,Symfony显然不知道如何回答。更新1中描述了我的工作流程。URL在后端形成(查看更新2).URL被修改为将区域设置设置为ru
,并从GET中添加搜索词
。您好,Vincent Phillipe。Thaks获取您的答案。不幸的是,两个GIST完全相同。并且您已经设置了两条路线
而没有术语
,您可以在“修订”中检查修订tab进入要点。你能告诉我我给出的代码是否符合你的需要吗?我已经更新了我的答案,因此链接依赖于正确的版本。对不起,我找到了罪魁祸首,这是一个未本地化的AJAX调用。后端没有问题。你好,Vincent Phillipe。谢谢你的回答。不幸的是,两个gist完全相同。你已经设置了both路由
无术语
您可以将“修订”选项卡中的修订检查到gist中。您能告诉我我给出的代码是否符合您的需要吗?我已经更新了我的答案,因此链接依赖于正确的修订。抱歉,我找到了罪魁祸首,因为它是未本地化的AJAX调用。后端没有问题。