1. dskst

    No comment

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