Silex可选的语言环境路由

时间:2013-05-21 13:43:07

标签: locale twig silex

我可能会以错误的方式接近这一点,所以我愿意接受替代方案。

我只想使用单一路线匹配以下示例网址:

/

/welcome
/en/welcome
/fr/welcome

/my/arbitrarily/deep/path
/en/my/arbitrarily/deep/path
/fr/my/arbitrarily/deep/path

这是我到目前为止所做的:

$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(在网址上没有指定区域设置,因此默认为en):

{{ path('*', {path:'foo/bar'}) }}

将正确地生成

foo/bar

on / fr / foo,同一个电话:

{{ path('*', {path:'foo/bar'}) }}

结果

frfoo/bar

这是因为{_locale}和{path}之间缺少/,但是通过将路线更改为:

/{_locale}/{path}

它会停止匹配/ foo并且只匹配/ en / foo,/ fr / foo或// foo。

我不确定从哪里开始:s

我不想使用多个路由(可能有一个有{_locale}的路由)因为我不确定如何使用path()函数,我基本上想要包含path()的结果url中的当前区域设置,如果它不是'en'(我认为是我得到的)。

任何人都可以帮我吗?

干杯

托比

1 个答案:

答案 0 :(得分:-1)

/{_locale}/{path}/{path}声明路线。

至于path(),由于您为第一条路线定义了默认_locale值,因此您的视图中不应出现任何问题。

相关问题