form - cakephp textarea




Добавление префикса к каждому URL-адресу в CakePHP (2)

rchavik из IRC предложил эту ссылку: CakePHP URL-адрес переключения языков для интернационализации и локализации i18n и l10n

В общем, кажется, что решением может быть переопределение Helper::url .

Какой самый чистый способ добавить префикс для каждого URL-адреса в CakePHP, например параметр языка?

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

Он должен работать с «настоящими» префиксами, такими как admin , и в идеале голый URL /controller/action может быть перенаправлен на /DEFAULT-LANGUAGE/controller/action .

Теперь он работает в ретро-приложении для меня, но это был своего рода хак, и мне нужно включить параметр языка вручную в большинстве ссылок, что не очень хорошо.

Таким образом, вопрос двоякий:

  • Каков наилучший способ структурирования маршрутов, поэтому параметр языка неявно включается по умолчанию без необходимости указывать для каждого вновь определенного маршрута?
    • Router::connect('/:controller/:action/*', ...) должен неявно включать префикс.
    • Параметр должен быть доступен в $this->params['lang'] или где-то аналогично оценке в AppController::beforeFilter() .
  • Как заставить Router::url() автоматически включать префикс в URL-адрес, если явно не указано?
    • Router::url(array('controller' => 'foo', 'action' => 'bar')) должен возвращать /en/foo/bar
    • Поскольку Controller::redirect() , Form::create() или даже Router::url() напрямую должны иметь одинаковое поведение, переопределение каждой отдельной функции на самом деле не является опцией. Например, Html::image() должен создавать URL без префикса.

Следующие методы, кажется, называют Router::url .

  • Controller::redirect
  • Controller::flash
  • Dispatcher::__extractParams через Object::requestAction
  • Helper::url
  • JsHelper::load_
  • JsHelper::redirect_
  • View::uuid , но только для генерации хеширования

Из них кажется, что методы Контроллера и Помощника должны быть переопределены, я мог бы жить без JsHelper . Моя идея состояла бы в том, чтобы написать общую функцию в AppController или, возможно, просто в bootstrap.php для обработки вставки параметров. Переопределенные методы Controller и Helper будут использовать эту функцию, как если бы я хотел вручную вызвать Router::url . Достаточно ли этого?


Более простой способ - сохранить выбранный язык в файле cookie, а затем не переписывать все URL-адреса. Вы также можете автоматически определить язык браузера пользователя.

Однако поисковые системы вряд ли будут воспринимать различные языки, и вы также потеряете язык, если кто-то попытается поделиться ссылкой.

Но любите полное решение, которое вы публикуете, очень всеобъемлющее, спасибо. :-)





prefix