LIGのメルマガ、はじめました!
LIGのメルマガ、はじめました!

元のページに戻って来る

まっちー

表示側で会員のログインフォームがサイドバーなんかにある場合に、ログインしたら常に特定のページへリダイレクトするのではなく、できればそのままのページにいたいですよね。

要はリファラーを取得できればいいわけですが、CakePHPのcontroller.phpを見てみると、refererというメソッドがあります。これを使うと、あっさりとリファラーを取得できる。

なので

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

ログインアクションにこんな一文を書いとけば、いっこ前のページに戻ってくれます。

ただ、あれですね。例えば会員用のマイページみたいなのがあって、ログアウトしている状態でそのページに行こうとすると、強制的にログイン画面に飛ばすような処理があった場合、上手くリファラは取れません。

トップページ ⇒ マイページ ⇒ ログインしていない状態だったのでログインページにリダイレクト

この場合のリファラはトップページになっています。だから、ログインしたらトップページに戻ってしまいますね。

あとはあれ。ログイン画面でログインに失敗した場合、リファラは今いるログイン画面になってしまうので、その状態でログインすると、無限ループになってしまいます。

ログイン画面がなく、ログアウト状態でマイページに飛んだら今のページに自動的に戻って来るとか、ログインフォームでログインに失敗してもエラーメッセージが出るだけでやっぱり今のページにいるままになるとか、そんな感じの仕様なら大丈夫だと思うんですけど、そうでなければこいつだけでは上手く対応できないかもですね。

まあ、便利な関数だとは思うんですけど、これ一つあれば万事解決ってほどの破壊力はない、ドラクエの呪文で言うとニフラムくらいの位置づけですかね? それかザメハ。

M o n g o