🍰

リダイレクトしてフラッシュメッセージが表示されないときはbeforeFilter()を見直す

2020/09/20に公開

これの続きのようなものですが、処理失敗時のフラッシュメッセージのレンダリングはできても、処理成功時(つまりリダイレクトで他の画面に移るとき)の出力は失敗、という状況が続きました。

この問題の解決は簡単です。

class FoosController extends AppController
{
    public $helpers = ['Html', 'Form'];

    /* ここから */
    public function beforeFilter()
    {
        parent::beforeFilter(); // ここが重要
    }
    /* ここまで */

    public function index()
    {
        $this->set('data', $this->Foo->find('all'));
    }
}

parent::beforeFilter()を書いておかないと、セッションが途切れてしまいフラッシュメッセージは表示されません。

一種類のMVCで完結しているならこの問題は起きませんが、複数のコントローラーをまたぐリダイレクトの際にリダイレクト後のコントローラーにparent::beforeFilter()が無いとこの問題が起きるようでした。

Discussion