最終更新: 2006-08-26 (土) 22:28:24
このページをDeliciousに追加 このページをはてなブックマークに追加 このページをlivedoor クリップに追加 このページをYahoo!ブックマークに追加

セッションを利用したフォーム値の受け渡し

概要

Ethna_ActionForm::getHiddenVars() というメソッドを用いると、 hidden タグを使って次の画面にフォーム値を渡すことができるが、 これを hidden タグでなくセッションを使って行えるようにする。

Revulo_ActionForm.php のインストール

例として、~/Ethna の下に作成した sample というプロジェクトで 利用する場合の手順を示す。

Revulo_ActionForm.php をダウンロードし、app ディレクトリにコピー。

$ wget http://www.revulo.com/download/Revulo_ActionForm.tar.gz
$ tar xvfz Revulo_ActionForm.tar.gz
$ cp Revulo_ActionForm.php ~/Ethna/sample/app/

app/Sample_Controller.php に以下の設定を追加。

include_once('Revulo_ActionForm.php');

app/Sample_Controller.php の $class の設定を以下のように変更。

var $class = array(
    ……
    'form'    => 'Revulo_ActionForm',
    ……
);

以下のファイルの extends Ethna_ActionForm となっている箇所を、 extends Revulo_ActionForm に変更。

  • skel/skel.action.php
  • app/action/*.php

追加されるメソッド

saveForm()
現在のフォーム値をセッションに保存する。
restoreForm()
セッションに保存されているフォーム値を読み込み、現在のフォーム値に追加する。 既にフォーム値が設定されていた場合は、現在のフォーム値を優先する。
clearForm()
セッションに保存されているフォーム値を破棄する。 ただし、その画面内で事前に saveForm() が実行されている場合は何もしない。

オススメの方法

セッションになるべくゴミが残らないようにするために、 コントローラクラスの _setDefaultTemplateEngine() メソッドに以下のコードを追加する。

$this->action_form->clearForm();

そして、セッションへの書き込み、読み込みは、 以下のように手動で行う。

  • フォーム値を次の画面に受け渡す

ビュークラスの preforward() メソッドの最後に、以下のように記述。

$this->af->saveForm();
  • 前の画面で保存したフォーム値を受け取る

アクションクラスの prepare() メソッドの先頭に、以下のように記述。

$this->af->restoreForm();

数画面連続でフォーム値を受け渡していく場合は、 restoreForm() で読み込んで saveForm() で保存という処理を、 各画面ごとに繰り返し行う。


(Counter:1, Today:1, Yesterday:0)
トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   最終更新のRSS