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/bar
OdController::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::redirect
Controller::flash
Dispatcher::__extractParams
przezObject::requestAction
Helper::url
JsHelper::load_
JsHelper::redirect_
View::uuid
, ale tylko dla generacji mieszaniaSpoś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?