【CakePHP】手動で元のページへリダイレクトする

【環境】


【困ったところ】
通常のAuthコンポーネントを使っている場合、ログイン・ログアウト後に
元のページへもどるのは簡単です。

$this->redirect($this->Auth->redirect());


OAuthの場合でも、ログアウトの場合は簡単です。


$this->redirect($this->referer());
問題はログインです。
一度、外部の『http://twitter.com/oauth/authorize』へ飛んでしまうので、
リファラを手繰って戻ることはできません。


【解決策】
ログイン用のアクションへ飛ぶ際に、『$this->here』を使って
現在のページのパス部分を渡します。

【ビュー】
echo $html->link('Twitterでログイン', "/twitter/login/{$this->here}");

//$this-hereの中身は"/localhost/controller/action"など。

渡された先では、『$this->here』の中身はスラッシュによって
それぞれひとつの引数として分割されるので、コントローラ以下を
再びつなげます。

【コントローラ】
function login(){
//『func_get_args()』を使って、アクション以下のパラメータが
//いくつ連なっても対応できるようにする。

$arr_arg = func_get_args();
$redirect = '';

//リダイレクトがトップページの場合
if(count($arr_arg) == 1) $redirect = '../';

//最初のパラメータ("localhost"など)は省く。
for($i=1; $i//もう一度つなげる
}

//セッションに記録する
$this->Session->write('redirect_url', $redirect);
...
}

//Twitterから戻ってきて実行されるアクション
function callback(){
...
$redirect = ($this->Session->read('redirect_url'))
? $this->Session->read('redirect_url')
: 'hoge/index';
$this->redirect($redirect);
}