Symfony 将可选的区域设置添加到路由

Symfony 将可选的区域设置添加到路由,symfony,Symfony,我想用可选的\u区域设置作为我所有URL的前缀。顺便说一句,我正在处理fr和en 关键是,当给出\u locale时,我将使用它,这要感谢Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest,如果没有,我将使用保存在数据库中的locale,这要感谢我自己的侦听器(优先级:15),它在上一个侦听器之后立即运行 到目前为止,我尝试了以下内容: app/config/routing.yml 和locale\

我想用可选的
\u区域设置作为我所有URL的前缀。顺便说一句,我正在处理
fr
en

关键是,当给出
\u locale
时,我将使用它,这要感谢
Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest
,如果没有,我将使用保存在数据库中的locale,这要感谢我自己的侦听器(优先级:15),它在上一个侦听器之后立即运行

到目前为止,我尝试了以下内容:

app/config/routing.yml

locale\u prefixed\u routing.yml
导入捆绑包路由

/fr/url/example
有效,但
/url/example
无效,返回404页


如何告诉symfony使用url中的区域设置,如果不存在,则使用数据库中的区域设置?

对于我来说,在用户未提供区域设置的情况下,将区域设置存储在数据库中听起来很奇怪。您只需添加一个默认值:

framework:
    default_locale: en

对我来说,当用户不提供语言环境时,在数据库中存储语言环境听起来很奇怪。您只需添加一个默认值:

framework:
    default_locale: en

我想您的路由在区域设置中是这样定义的\u前缀\u routing.yml

my_route:
    path: /
    defaults:
实际上,没有任何区域设置的路由(如
/url/example
)不会在路由中定义,因为您要求在locale\u prefixed\u routing.yml中加载的所有路由前面加上区域设置前缀。因此,在没有区域设置的情况下请求这样的路由时,出现错误是正常的

您可以尝试创建另一个名为非本地化路由.yml的路由文件,该文件包含相同的路由,但您将使用特定的默认值

例如:

route_example:
    path: /url/example
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /{_locale}/url/example
        permanent: true

告诉我它是否允许您解决问题,我还没有测试它。

我想您的路由在您的区域设置\u前缀\u路由中是这样定义的。yml

my_route:
    path: /
    defaults:
实际上,没有任何区域设置的路由(如
/url/example
)不会在路由中定义,因为您要求在locale\u prefixed\u routing.yml中加载的所有路由前面加上区域设置前缀。因此,在没有区域设置的情况下请求这样的路由时,出现错误是正常的

您可以尝试创建另一个名为非本地化路由.yml的路由文件,该文件包含相同的路由,但您将使用特定的默认值

例如:

route_example:
    path: /url/example
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /{_locale}/url/example
        permanent: true

告诉我它是否允许您解决问题,我还没有测试它。

该问题与默认语言环境无关。这是一个路由定义问题,没有定义区域设置的路由。他必须对其进行定义,以指定使用区域设置的默认路线。此问题与默认区域设置无关。这是一个路由定义问题,没有定义区域设置的路由。他必须对它们进行定义,以指定要使用的默认路由和区域设置。