CakePHP – как перевести текущий URL-адрес после смены языка и перезагрузки таблицы маршрутизацииPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 CakePHP – как перевести текущий URL-адрес после смены языка и перезагрузки таблицы маршрутизации

Сообщение Anonymous »

Я использую разные таблицы маршрутизации для каждого языка и написал действие, которое меняет язык и перенаправляет на ту же страницу, но на целевом языке (и целевом URL).

Основная проблема в том, что мое действие слишком сложное — как его упростить?
Оно должно изменить язык и перенаправить на новый URL-адрес (на целевом языке).
Вкратце: у нас был случайный действительный URL-адрес торта на одном языке, и нам пришлось перевести его в адекватный URL-адрес на другом языке.

Моя таблица маршрутизации:

Код: Выделить всё

if( 'en' == Configure::read('Config.language') ) {
Router::connect('/help',   array('controller' => 'pages', 'action' => 'display', 'help') );
} else {
Router::connect('/pomoc',   array('controller' => 'pages', 'action' => 'display', 'help') );
}
Действие по изменению языка:

Код: Выделить всё

function lang($lang) {

// getting previous url table
$url = $this->referer();
$url = Router::parse($url);

// changing language
if( in_array($lang, Configure::read('Languages.valid') ) ) {
$this->Session->write('Language', $lang);
Configure::write('Config.language', $lang);
}

// saving base params
$requestInfo = array(Router::getParams(), Router::getPaths());
// reload routing table
Router::reload();
include(CONFIGS.'routes.php');
// restore base params
Router::setRequestInfo($requestInfo);

// fix for 'pass' params
if(!empty($url['pass']) && is_array($url['pass'])) {
$url = array_merge($url, $url['pass']);
unset($url['pass']);
}
$this->redirect($url);
}
О ключе pass в таблице URL-адресов:

Код: Выделить всё

/pages/display/help
после Router::parse() извлекается параметр:

Код: Выделить всё

pass => array(
0 => 'help'
)
и более поздние значения, возвращаемые Router::url(), выглядят следующим образом:

Код: Выделить всё

/pages/display/pass:Array
поэтому мне придется это исправить, объединив значение pass со всем массивом и удалив ключ

Подробнее здесь: https://stackoverflow.com/questions/689 ... oading-rou
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»