リダイレクトにアクション名だけを指定してたら、うまくURLを作ってくれなかった

ショーンホワイトの金メダルライディングをみて癒されました。次元が違う、一番好きだったのは540のグラブで足を突き上げてるやつ。高く飛んで、ゆっくり余裕で回転してるほうが、くるくる回ってるより好きです。素晴らしいルーティーン、そして悲しいルーティング。。。今日はroutesとの格闘が続いております。

Cake1.2.6
リダイレクトで、ルーティングを色々と設定してる時に、そのルーティング通りのURLにならなかったので、その対応。
routes.phpはこうなってて、

Router::connect('/mobile/users/:action', 
array('controller' => 'user_mobiles',  ));

/mobile/users/hogeの画面から、リダイレクトで/mobile/users/hoge2に遷移させようとしたとき、user_mobilesコントローラで

$this->redirect('hoge2');

としたら、/user_mobiles/hoge2にリダイレクトされてしまった。。。

結局、下記のようにリダイレクトを修正して対応。

$this->redirect(array('action' => 'hoge2'));

リダイレクト内で、Router::url()を呼び出してるので、それで問題が起こらない形に持っていくのが良いみたい。他のコントローラへのリダイレクトなら、

$this->redirect(array('controller' => 'others', 'action' => 'fuga'));

こんな感じで指定。


参考
http://book.cakephp.org/view/425/redirect
http://api.cakephp.org/view_source/controller/#line-536