Dodawanie prefiksu do każdego adresu URL w CakePHP

Jaki jest najczystszy sposób dodawania prefiksu do każdego adresu URL w CakePHP, jak parametr języka?

http://example.com/en/controller/action
http://example.com/ru/admin/controller/action

Musi pracować z „prawdziwymi” prefiksami, takimi jakadmin, a najlepiej nagi adres URL/controller/action może zostać przekierowany do/DEFAULT-LANGUAGE/controller/action.

To działa teraz w dopasowanej aplikacji dla mnie, ale było to trochę hakowania i muszę ręcznie dodać parametr języka w większości linków, co nie jest dobre.

Więc pytanie jest dwojakie:

Jaki jest najlepszy sposób na strukturę tras, więc parametr języka jest domyślnie zawarty domyślnie bez konieczności określania dla każdej nowo zdefiniowanej trasy?Router::connect('/:controller/:action/*', ...) powinien zawierać domyślnie prefiks.Parametr powinien być dostępny w$this->params['lang'] lub gdzieś podobnym do oceny wAppController::beforeFilter().Jak dostać się doRouter::url() aby automatycznie dołączyć prefiks do adresu URL, jeśli nie jest wyraźnie określony?Router::url(array('controller' => 'foo', 'action' => 'bar')) powinien wrócić/en/foo/barOdController::redirect(), Form::create() lub nawetRouter::url() bezpośrednio musi mieć to samo zachowanie, nadpisywanie każdej pojedynczej funkcji nie jest opcją.Html::image() na przykład powinien wygenerować adres URL bez prefiksu.

Następujące metody wydają się wywoływaćRouter::url.

Controller::redirectController::flashDispatcher::__extractParams przezObject::requestActionHelper::urlJsHelper::load_JsHelper::redirect_View::uuid, ale tylko dla generacji mieszania

Spośród nich wydaje się, że metody kontrolera i pomocnika musiałyby zostać zastąpione, mógłbym żyć bezJsHelper. Moim pomysłem byłoby napisanie ogólnej funkcji wAppController a może po prostubootstrap.php do obsługi wstawiania parametrów. Przesłonięte metody kontrolera i pomocnika będą korzystać z tej funkcji, tak jak w przypadku ręcznego wywołaniaRouter::url. Czy to wystarczy?

questionAnswers(3)

yourAnswerToTheQuestion