FuelPHPのset_flash()とredirect処理の関係について気がついたことをメモっておきます。雑文乱文ですんません。WinRoad徒然草さんの記事を参考にさせていただきました。ありがとうございます。
セッションの値が消える
set_flash()のあとにredirect処理をすると、セッションに入れた値が消えます。下記のコードでも新規のデータは保存されます。またcollection/indexにリンクします。ですが、Session::set_flashの値は消えます。
[php]
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’);
}
[/php]
redirect処理をコメントアウトする
自分は、17行目のResponse::redirectの行をコメントアウトしました。collection/indexへリンクできませんが、引数の内容はcollection/addで表示されます。
Stack Overflowでも言及されていますが、set_flash()のあとにredirect処理をするのはよろしくないみたいです。set_flash()の引数を表示させた上で、collection/indexへリンクさせるためには、別の方法を考えないといけないですね。
〔参考サイト〕