Возможно, я подхожу к этому неправильно, поэтому я открыт для альтернатив.
Я просто хотел бы сопоставить следующие образцы 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-адрес, например: #
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.
Я не уверен, куда идти отсюда: с
Я не хотел использовать несколько маршрутов (возможно, один с {_locale} и без него), потому что я не уверен, как это работает с функцией path(), я в основном хочу, чтобы результат path() включал текущую локаль в URL-адресе, если это не «en» (я думаю, это то, к чему я клоню).
Кто-нибудь может мне с этим помочь?
Ваше здоровье
Тоби