Я хочу переопределить «перенаправление» для вставки префикса языка. Для этого я добавил это в AppController.php
public function redirect( $url, $status = NULL, $exit = true ) {
die(debug('$url'));
if (!isset($url['language']) && $this->Session->check('Config.language')) {
$url['language'] = $this->Session->read('Config.language');
}
parent::redirect($url,$status,$exit);
}
Очевидно, что die (..) просто для проверки, если эта функция вызывается.
Код моего контроллера:
public function add() {
if ($this->request->is('post')) {
$this->request->data['Party']['language_id'] = $this->Session->read('Config.LanguageId');
$this->Party->create();
if ($this->Party->save($this->request->data)) {
$this->Session->write('partyId', $this->Party->id);
return $this->redirect(array(
'controller' => 'parties',
'action' => 'editGuestlist',
));
} else {
$this->Session->setFlash(__('The party could not be saved. Please, try again.'));
}
}
}
Я ожидал, что «$ this-> redirect» в XyzController вызовет мою публичную функцию «redirect» в AppController.
Если я добавляю вечеринку, меня перенаправляют в / party / editGuestlist, префикс не добавляется и код не останавливается. Так что совершенно очевидно, что мое переопределение не работает. Поскольку я новичок в CakePHP, я надеюсь, что кто-нибудь сможет объяснить мне это поведение.
ОБНОВИТЬ
Я нашел ошибку в /config/routes.php, которая исправила поведение, но я до сих пор не понимаю, почему моя переопределяющая функция вообще не вызывается.
Я добавил массив (‘language’ => ‘[a-z] {3}’) к
Router::connect('/:language/:controller/:action/*',
array(),
array('language' => '[a-z]{3}')
);
Задача ещё не решена.
Других решений пока нет …