私はこれに間違った方法でアプローチしている可能性があるので、代替案を受け入れます。
単一のルートを使用して、次のサンプル URL を一致させたいだけです。
/
/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('*');
これで期待どおりに動作するように見えますが、小枝の path() または url() を使用しようとすると、正しい URL を構築できません。例: #
/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に(私が得ているものだと思います)。
誰でもこれで私を助けることができますか?
乾杯
トビー