从4.1版开始,Symfony现在无需外部插件即可处理多语言路由(https://symfony.com/blog/new-in-symfony-4-1-internationalized-routing)。我已经成功翻译了我的路线,并且一切正常,除了访问根网址(“ /”)时,Symfony会显示404错误,而不是重定向到诸如“ / en /”之类的语言文件夹。
我已经进行了一些研究,但发现的大多数内容已经过时了(主要是Symfony 2)。还遇到了这个Symfony 3将所有路由重定向到当前语言环境版本,但是对于这样一个简单的问题,这似乎是一个令人难以置信的繁琐解决方案。
理想情况下,我也想将URL“ / admin”重定向到“ / en / admin”,但是如果我无法实现它,那么我可以接受。
这是我的route / annotations.yaml文件:
controllers:
resource: ../../src/Controller/
type: annotation
prefix:
fr: '/fr'
en: '/en'
de: '/de'
Run Code Online (Sandbox Code Playgroud)
我的翻译.yaml文件:
framework:
#default_locale: '%locale%'
default_locale: 'en'
translator:
paths:
- '%kernel.project_dir%/translations'
fallbacks:
- 'en'
Run Code Online (Sandbox Code Playgroud)
本地路由配置:
@Route("/", name="home")
Run Code Online (Sandbox Code Playgroud)
您似乎没有匹配的路由/,可能是因为您所有的路由都以语言代码作为前缀。
您可以使用命令行工具对此进行调试:
php bin/console router:match "/"
Run Code Online (Sandbox Code Playgroud)
如果成功,则应返回以下内容:
[OK] Route "homepage" matches
+--------------+-------------------------------------------------------------------------------------------+
| Property | Value |
+--------------+-------------------------------------------------------------------------------------------+
| Route Name | homepage |
| Path | / |
| Path Regex | #^/$#sD |
| Host | ANY |
| Host Regex | |
| Scheme | ANY |
| Method | GET |
| Requirements | NO CUSTOM |
| Class | Symfony\Component\Routing\Route |
| Defaults | _controller: App\Controller\HomeController::index |
| Options | compiler_class: Symfony\Component\Routing\RouteCompiler |
+--------------+-------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
如果不成功,则有多种选择。您可以为“ /”路由创建一个侦听器,以尝试确定正确的语言环境,然后重定向到正确的语言环境,或者始终重定向到您的“主要”语言,例如,使用如下路由:
homepage:
path: /
controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction
defaults:
path: /en
permanent: true
Run Code Online (Sandbox Code Playgroud)
编辑以澄清:
您的路线/annotation.yaml可能如下所示:
controllers:
resource: ../../src/Controller/
type: annotation
prefix:
fr: '/fr'
en: '/en'
de: '/de'
home_fallback:
path: /
controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction
defaults:
path: /en
permanent: true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1573 次 |
| 最近记录: |