Call to a member function setFlash() on null への対策

現象

  1. post 処理をした
  2. post 処理の中で setFlash を叩いた(X)
  3. Call to a member function setFlash() on null が発生する
  4. (CakePHP 2.5.6 より)

(X)

 18     public function add() {
 21       if($this->request->is('post')) {
 22         if ($this->User->save($this->request->data)) {
 23           $this->Session->setFlash('Success!');
 24           $this->redirect(array('action' => 'index'));
 25         } else {
 26           $this->Session->setFlash('failed!');
 27         }
 28       }
 29     }

理由

Session モジュールが app に include されていない

対策

AppController に次のソースを記載する

  public $components = array('Session', 'DebugKit.Toolbar');
  1 <?php
  2   
  3 App::uses('Controller', 'Controller');
  4   
  5 class AppController extends Controller {
  6   public $components = array('Session', 'DebugKit.Toolbar');
  7 }
  8 ?>

AppController でモジュールを読み込むべきかどうかは要検証項目

コントローラとコンポーネント > SessionヘルパーとSessionコンポーネント > SessionHelperとSessionComponentの両方とも、もはやあなたが求めない限り自動で読み込まれなくなりました。