1. TOPTOP
  2. Webサービス
  3. FuelPHP

FuelPHPのSession::set_flash()のあとにredirect処理をするとセッションのデータが消える

|

web_dev

FuelPHPのset_flash()redirect処理の関係について気がついたことをメモっておきます。雑文乱文ですんません。WinRoad徒然草(新しいタブで開く)さんの記事を参考にさせていただきました。ありがとうございます。

セッションの値が消える

set_flash()のあとにredirect処理をすると、セッションに入れた値が消えます。下記のコードでも新規のデータは保存されます。またcollection/indexにリンクします。ですが、Session::set_flashの値は消えます。

public function action_add($id=null){
        //もしPOST送信されたら
        if (Input::method() == 'POST') {
            $val = Model_Collection::validate('add');
            if ($val->run()) {
                $collection = Model_Collection::forge(array(
                    'title' => Input::post('title'),
                    'created' => date('Y-m-d H:i:s'),
                    'col_code' => Input::post('col_code'),
                    'save_space' => Input::post('save_space'),
                ));
                //もしデータが保存されたら
                 if ($collection and $collection->save()) {
                     // 新規データは保存されてるが、引数の内容は表示されない
                     Session::set_flash('success', '<span class="btn btn-primary span8">ID-'.$collection->id.'の『'.$collection->title.'』を追加しました</span><br>');
                    //indexページへ移動
                    Response::redirect('http://IPアドレス/testproject/collection/index');
                 } else {
                     //データが保存されなかったら 
                     Session::set_flash('error', '保存できませんでした');
                 }
            } else {
                //バリデーションNGなら
                Session::set_flash('error', $val->show_errors());
            }
        }
       $this->template->content = View::forge('collection/add');
   }

set_flash1

redirect処理をコメントアウトする

自分は、17行目のResponse::redirectの行をコメントアウトしました。collection/indexへリンクできませんが、引数の内容はcollection/addで表示されます。

set_flash2

Stack Overflowでも言及されていますが、set_flash()のあとにredirect処理をするのはよろしくないみたいです。set_flash()の引数を表示させた上で、collection/indexへリンクさせるためには、別の方法を考えないといけないですね。

〔参考サイト〕