2013年4月4日木曜日

【CakePHP】$this->renderとbeforeRenderの関係

今日はまった出来事。

権限によってviewを変更しようと思って、どこで調整しようかなーと考えてて、
beforeRenderならひと通りできそうだしいいじゃね?!と思ってやってみたらダメだった。

やろうとしている人が居られたら注意を。

■環境
・CentOS 6.5
・PHP 5.3
・CakePHP 2.3.1

なんでかなーと思って調べました。
Controllerの順序は↓な感じだと思う。

beforeFilter
(action)
beforeRender
(view)
afterFilter

使ってる人はご存知の通り、Controller中で$this->renderを使用したタイミングでviewへ処理が移行してしまい、Controllerでの処理が続行できない。
これは、autoRenderが働くためと思われる。詳細は調べてないのです。
$this->outputを呼び出しているせいで、その時点でview用のデータがセットされてしまうとのこと。

んで、重要なのはbeforeRenderと$this->renderのタイミング。

どうやら、beforeRenderはこの$this->outputを呼び出したあとに処理される模様。
普通に考えてみりゃそりゃそうだ。

プレフィックスルーティングもだるいし、viewだけディレクトリ切って各権限毎に振り分ける場合とかどうしたらいいんだべ?

今回は諦めてctpファイルを調整することにします。

0 件のコメント:

コメントを投稿