Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php GenerateUrl不遵守Symfony4.4中的本地化路线 介绍_Php_Symfony_Routes_Internationalization_Symfony4 - Fatal编程技术网

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调用。后端没有问题。