1

私はこれに間違った方法でアプローチしている可能性があるので、代替案を受け入れます。

単一のルートを使用して、次のサンプル 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に(私が得ているものだと思います)。

誰でもこれで私を助けることができますか?

乾杯

トビー

4

1 に答える 1

-1

/{_locale}/{path}とのルートを宣言し/{path}ます。

path() に関しては、最初の route にデフォルトの _locale 値を定義したので、ビューに問題はないはずです。

于 2013-05-21T22:30:32.473 に答える