1

我可能以错误的方式处理这个问题,所以我对替代方案持开放态度。

我只想使用单个路由匹配以下示例 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 中(我认为这就是我所得到的)。

谁能帮我这个?

干杯

托比

4

1 回答 1

-1

/{_locale}/{path}为和声明一条路线/{path}

至于 path() ,由于您为第一个 route 定义了默认 _locale 值,因此您的视图中应该没有任何问题。

于 2013-05-21T22:30:32.473 回答