我可能以错误的方式处理这个问题,所以我对替代方案持开放态度。
我只想使用单个路由匹配以下示例 url:
/
/welcome
/en/welcome
/fr/welcome
/my/arbitrarily/deep/path
/en/my/arbitrarily/deep/path
/fr/my/arbitrarily/deep/path
ETC
这是我到目前为止所拥有的:
$app->get('/{_locale}{path}', function (Request $request) use ($app) {
$path = $request->attributes->get('path');
// do stuff with path here
})
->value('_locale', 'en')
->assert('_locale','^(en|fr)?$')
->value('path', 'index')
->assert('path', '.*')
->bind('*');
现在这似乎按预期工作,但是当我尝试使用 twig path() 或 url() 时,它无法构建正确的 url,例如:#
on /foo(没有在 url 上指定语言环境,因此默认为 en):
{{ path('*', {path:'foo/bar'}) }}
将正确地导致
foo/bar
在 /fr/foo 上,同样的调用:
{{ path('*', {path:'foo/bar'}) }}
结果是
frfoo/bar
这是因为 {_locale} 和 {path} 之间缺少 /,但是通过将路由更改为:
/{_locale}/{path}
它停止匹配 /foo 并且只匹配 /en/foo、/fr/foo 或 //foo。
我不知道从这里去哪里:s
我不想使用多条路由(可能一个有和没有 {_locale} 的路由),因为我不确定它如何与 path() 函数一起使用,我基本上希望 path() 的结果包含当前语言环境如果它不是“en”,则在 url 中(我认为这就是我所得到的)。
谁能帮我这个?
干杯
托比