LoginSignup
5
7

More than 5 years have passed since last update.

CakePHP / 「Call to a member function success() on a non-object」 エラーが発生したら

Last updated at Posted at 2015-10-28

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

5
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7