CakePHP 2.7.x でのフラッシュメッセージの表示でエラー発生
CakePHP 2.7.0 以降、フラッシュメッセージの表示は FlashHelper にて実装される。
FlashHelper — CakePHP Cookbook 2.x documentation
それはいいのだが、初見殺しだと感じた事があったのでメモ。
環境
- PHP 5.4.16
- CakePHP 2.7.5
インストール後特に何もしていないプレーンな状態。 - アプリケーションは
bake all Foo
のように bake コマンドで作成
事象
bake コマンドで作成したアプリケーションにて、データの削除や追加などを行うと下記エラーが表示された。
Call to a member function success() on a non-object
表示されているファイル・該当行を確認すると、下記のような箇所でエラーが発生している。
$this->Flash->success(__('Hoge is foo.'));
Flash オブジェクトが無いのだが何故ないのかが最初はわからなかった。
ドキュメント読む限りはセッションにフラッシュメッセージがセットされるようなので、セッションが動作していないかを疑ったが、特に問題なく動作していた。
原因
原因はコントローラーにて、コンポーネントが設定されていなかったから。
コントローラーのクラス定義の一番上の方にコンポーネントを設定している箇所がある。
// ここでコンポーネントを設定している
public $components = array('Paginator');
下記のように FlashComponent を設定する。
public $components = array('Paginator', 'Flash');
これでエラーが解消されて、フラッシュメッセージが無事表示される。
bake コマンドの時点で FlashComponent を設定しておいてくれればいいのに。