Я использую разные таблицы маршрутизации для каждого языка, и я написал действие, которое меняет язык и перенаправляет на ту же страницу, но на целевом языке (и целевом 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
, поэтому я должен исправить это, объединив 'передать значение со всем массивом и удалить ключ