Как установить префикс по умолчанию для маршрутизации в CakePHP 3? - PullRequest
0 голосов
/ 11 сентября 2011

Я использую префиксы для языков, я не уверен, что это правильный путь, но я не хочу писать собственные маршруты для каждого из моих контроллеров.У меня сейчас 20 контроллеров (самое простое).

У меня проблема в том, что / nl / contact и / en / contact пытаются маршрутизировать к nl_index () и en_index (), что хорошо для маршрутизации администратора, но все контроллеры были запрограммированы на нескольких языках и с использованием i18n, поэтому они должны использовать только index (), edit () и т. д., а не language_ перед ним.

Как это можно сделать?Причина, по которой я добавил эти префиксы, заключается в том, что я могу использовать один и тот же контроллер и функции для большего количества контента.В настоящее время я пишу язык Configure.write в beforeFilter для языков, основанных на первых 2/3 символов URL (/ en, /nl).

1 Ответ

1 голос
/ 11 сентября 2011

Я представлю вам реализацию в Croogo CMS на основе CakePHP

вот класс CroogoRouter Маршрутизатор

посмотрите на эту строку:

Router::connect('/:locale/:controller/:action/*', array(), array('locale' => '[a-z]{3}'));

Это создаст шаблон Localized routes, где locale переменная может быть 3-буквенный код языка ( читать в ISO 639 )

, что означает, что если любой из проанализированных путей начнется с 3 letter code, он будет использоваться как переменная locale, передаваемая в AppController

Тогда посмотрите на этот файл , где представлено использование такого класса:

CroogoRouter::connect('/', array('controller' => 'nodes', 'action' => 'promoted'));

Как вы можете видеть, вы подключите немного action path (здесь /) к контроллеру и действию, но CroogoRouter позаботится о локализации этого пути с помощью :locale variable

Примечание. Не забудьте упомянуть лицензию MIT , которая по умолчанию установлена ​​для Croogo CMS , если вы собираетесь использовать ее код; -)

...