FuelPHPのSession::set_flash()のあとにredirect処理をするとセッションのデータが消える
|
目次
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'); }
redirect処理をコメントアウトする
自分は、17行目のResponse::redirectの行をコメントアウトしました。collection/indexへリンクできませんが、引数の内容はcollection/addで表示されます。
Stack Overflowでも言及されていますが、set_flash()のあとにredirect処理をするのはよろしくないみたいです。set_flash()の引数を表示させた上で、collection/indexへリンクさせるためには、別の方法を考えないといけないですね。
〔参考サイト〕