#ページの共通部分に通知を出したい
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と同様の結果を得た。
<?php
#省略
public function beforeRender(){
if($this->layout === 'default'){
$this->set('notifications', ClassRegistry::init('Notification')->find('all'));
}
}