【CakePHP2】requestActionがSessionに悪さをしている気がする


ページの共通部分に通知を出したい

requestActionを使って通知を取得していた

View/ElementsのHeader.ctpからrequestActionを使って通知取得用のメソッドを呼び出していた。よくある使い方だと思うし、特に問題なく動いているように見えた。

AuthComponentを併用した場合の再ログインで挙動がおかしい

Sessionが切れて自動ログアウトをした後再度ログインすると、requestActionで指定したURLにアクセスしてしまう。(action内では$this->request->params['requested']で判定しているのでエラーが出る。)これは困った。
何回か試してみたが、起こるときと起こらないときの差がわからず、うまく再現できない。
でもrequestActionが悪いに違いないので、使わないことにした。
(もしかすると、AuthComponentの設定が悪いのかもしれないが。)

どうせヘッダーで読み込むならAppControllerに書いてしまえ

ほとんどのページで通知領域は表示するので、AppControllerに共通処理として埋め込むことにした。
でもログイン用のlayoutで読み込む必要はないので、layoutで条件分岐したい。そうなると、beforeFilterでは各actionの$this->layoutが反映されていないから、beforeRenderあたりに書くことになるのだろうか。
結局以下のように書くことでrequestActionと同様の結果を得た。

AppController.php
<?php
#省略
    public function beforeRender(){
        if($this->layout === 'default'){
            $this->set('notifications', ClassRegistry::init('Notification')->find('all'));
        }
    }