簡體   English   中英

在Symfony 4中將路由重定向到語言前綴

[英]Redirect route to language prefix in Symfony 4

從版本4.1開始,Symfony現在可以處理多語言路由,而無需外部插件( https://symfony.com/blog/new-in-symfony-4-1-internationalized-routing )。 我已經成功翻譯了我的路線並且一切正常,除了當訪問根URL(“/”)時,Symfony呈現404錯誤而不是重定向到語言文件夾,例如“/ en /”。

我做了一些研究,但我發現的大部分內容已經過時了(主要是Symfony 2)。 此外,還遇到了Symfony 3將所有路由重定向到當前語言環境版本,但對於這樣一個簡單的問題,這似乎是一個非常繁瑣的解決方案。

理想情況下,我還想將網址“/ admin”重定向到“/ en / admin”,但如果我無法實現它,我可以忍受它。

這是我的routes / annotations.yaml文件:

controllers:
    resource: ../../src/Controller/
    type: annotation
    prefix:
        fr: '/fr'
        en: '/en'
        de: '/de'

我的翻譯.yaml文件:

framework:
#default_locale: '%locale%'
default_locale: 'en'
translator:
    paths:
        - '%kernel.project_dir%/translations'
    fallbacks:
        - 'en'

家庭路線配置:

@Route("/", name="home")

看起來您沒有路由匹配/ ,可能是因為您的所有路由都以語言代碼為前綴。

您可以使用命令行工具進行調試:

php bin/console router:match "/"

如果它成功了它應該返回這樣的東西:

 [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                                   |
+--------------+-------------------------------------------------------------------------------------------+

如果不成功,有多種選擇。 您可以為嘗試確定正確語言環境的“/”路由創建一個偵聽器,然后重定向到正確的語言環境,或者只是始終重定向到“主要”語言,例如使用如下路由:

homepage:
    path: /
    controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::urlRedirectAction
    defaults:
        path: /en
        permanent: true

編輯澄清:

您的routes / 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM