Cakephp PHP WEB開発

[Cakephp2→4]Cake2のリダイレクト値をCake4で取得する

※本サイトはPR表記を含みます。

例えば、Cake2のログイン画面をCake4へ移行後、Cake2な画面に直URLでアクセスしようとすると、Cake4なログイン画面へ遷移され、その後、ログインしてもCake2な画面へ動的なリダイレクトをすることがデフォルトではできません。(ここまでで十分ややこしい例えだけど)

そこで、Cake4な画面からではリダイレクト値にGETパラメータが付与されるのですが、Cake2な画面からではSessionのAuth.redirectに書き込まれている形になっています。

なので、結論として、Cake4なコントローラー内でSessionをAuth.redirect値を読み込めば、その値がある場合はそのリダイレクトへ転送する実装をすることで可能になります。

例: Cake2のセッションに書き込まれたリダイレクト値をCake4で読み込む

// コントローラーメソッド内にて記述
$redirectUrl = !empty($this->getRequest()->getSession()->read('Auth.redirect')) ? $this->getRequest()->getSession()->read('Auth.redirect') : $this->getRequest()->getQuery($redirect);

return $this->redirect($redirectUrl);

上記は、Auth.redirect値がある場合(Cake2)は、それをリダイレクト値として、なければgetQuery()でCake4のGETパラメータ値を取得し、それをリダイレクト値として返す形にしてます。GETパラメータはテンプレートのログインボタンなどに、GETパラメータ値を付与する必要があります。

なので、簡単にいうと、Cakephp4なコントローラーでCake2のリダイレクトURL値を取得するには

$this->getRequest()->getSession()->read('Auth.redirect')

を読めば、値を取得できます。
後は、煮るなり焼くなりお好きにどうぞ。

・Cakephp2.10 redirectUrl()
https://api.cakephp.org/2.10/class-AuthComponent.html#_redirectUrl

・Cakephp3.4.0より前はAuth.redirect値を利用されている
https://book.cakephp.org/4/ja/controllers/components/authentication.html

 

-Cakephp, PHP, WEB開発
-