表示側で会員のログインフォームがサイドバーなんかにある場合に、ログインしたら常に特定のページへリダイレクトするのではなく、できればそのままのページにいたいですよね。
要はリファラーを取得できればいいわけですが、CakePHPのcontroller.phpを見てみると、refererというメソッドがあります。これを使うと、あっさりとリファラーを取得できる。
なので
$this->redirect($this->referer());
ログインアクションにこんな一文を書いとけば、いっこ前のページに戻ってくれます。
ただ、あれですね。例えば会員用のマイページみたいなのがあって、ログアウトしている状態でそのページに行こうとすると、強制的にログイン画面に飛ばすような処理があった場合、上手くリファラは取れません。
トップページ ⇒ マイページ ⇒ ログインしていない状態だったのでログインページにリダイレクト
この場合のリファラはトップページになっています。だから、ログインしたらトップページに戻ってしまいますね。
あとはあれ。ログイン画面でログインに失敗した場合、リファラは今いるログイン画面になってしまうので、その状態でログインすると、無限ループになってしまいます。
ログイン画面がなく、ログアウト状態でマイページに飛んだら今のページに自動的に戻って来るとか、ログインフォームでログインに失敗してもエラーメッセージが出るだけでやっぱり今のページにいるままになるとか、そんな感じの仕様なら大丈夫だと思うんですけど、そうでなければこいつだけでは上手く対応できないかもですね。
まあ、便利な関数だとは思うんですけど、これ一つあれば万事解決ってほどの破壊力はない、ドラクエの呪文で言うとニフラムくらいの位置づけですかね? それかザメハ。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。