Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Organization

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
7
Help us understand the problem. What are the problem?