Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 Symfony使用BeSimple/BESIMPLEI18N路由绑定重复路由转换路由_Php_Symfony_Routing_Routes_Translation - Fatal编程技术网

Php Symfony使用BeSimple/BESIMPLEI18N路由绑定重复路由转换路由

Php Symfony使用BeSimple/BESIMPLEI18N路由绑定重复路由转换路由,php,symfony,routing,routes,translation,Php,Symfony,Routing,Routes,Translation,我正在创建一个多语言网站,并使用BeSimple/BeSimpleI18nRoutingBundle进行路线翻译。我的配置中的路由如下所示: about: locales: { en: "/{_locale}/about-us", lt: "/{_locale}/apie-mus" } defaults: { _controller: BaseBundle:Base:about } 然而,在这种情况下,我得到了重复的路由,就像我输入/en/about-us或/lt/about

我正在创建一个多语言网站,并使用
BeSimple/BeSimpleI18nRoutingBundle
进行路线翻译。我的配置中的路由如下所示:

about:
    locales:  { en: "/{_locale}/about-us", lt: "/{_locale}/apie-mus" }
    defaults: { _controller: BaseBundle:Base:about }
然而,在这种情况下,我得到了重复的路由,就像我输入/en/about-us或/lt/about-us一样,它以两种方式工作。但是在第二种情况下,它应该是404错误,因为lt locale的路由应该是/lt/apie mus,这也可以正常工作

有没有办法解决这个问题?或者有没有更好的翻译路线的方法

然而,在这种情况下,我得到了重复的路线

每种语言有一条路线:

$ app/console router:debug
about.en                 ANY    ANY    ANY  /{_locale}/about-us
about.lt                 ANY    ANY    ANY  /{_locale}/apie-mus
当您在URL
/lt/about us
上时,UrlMatcher将匹配en版本:

$app/控制台路由器:匹配/lt/关于我们
路由“about.en”匹配
[路由器]路由“about.en”
姓名:about.en
Path/{u locale}/关于我们
路径正则表达式#^/(?P[^/]++)/大约\-us$#s
主持任何
主机正则表达式
计划任何
方法任何
类Symfony\Component\Routing\Route
默认值\u控制器:AppBundle:默认值:索引
_地点:恩
无需定制
选项编译器\u类:Symfony\Component\Routing\RouteCompiler
在这种情况下,本地将是en而不是lt


但我不认为你应该担心,因为访问者访问我们的唯一方式是自己编辑URL。

与BeSimple交锋后,我在10分钟内将我的项目切换到JMSI18nRoutingBundle。它运行良好,解决了路由问题。首先:它包含多种前缀模式(带有区域设置),其次它允许翻译每条路由。

这让我担心,如果谷歌能够以某种方式索引
/lt/about-us
/en/about-us
,因为如果生成捆绑包中解释的URL,那么不同URL的内容将是重复的:
{path('about',{'locale':'en'}}
谷歌没有理由索引不在你的html中的URL。如果这还不够,你可以生成
robots.txt
网站地图。
$ app/console router:match /lt/about-us
Route "about.en" matches

[router] Route "about.en"
Name         about.en
Path         /{_locale}/about-us
Path Regex   #^/(?P<_locale>[^/]++)/about\-us$#s
Host         ANY
Host Regex
Scheme       ANY
Method       ANY
Class        Symfony\Component\Routing\Route
Defaults     _controller: AppBundle:Default:index
             _locale: en
Requirements NO CUSTOM
Options      compiler_class: Symfony\Component\Routing\RouteCompiler