1. dskst

    No comment

    dskst
Changes in body
Source | HTML | Preview

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 を設定しておいてくれればいいのに。