[PHP-users 28602] 複数ページフォームのページ遷移制御について

Mitsuharu Takano mtakano @ r2.dion.ne.jp
2006年 3月 2日 (木) 01:35:18 JST


こんばんは。
高野と申します。

現在 php5 + HTML_QuickForm + Smartyを使用して
Webアプリを作成しております。
とりあえず動作はするようになったのですが今ひとつ
美しくないので、何かご意見いただけたらと思いメール
しました。

私が作っているアプリの標準的な画面/処理遷移は、以下の通りです。

1) 入力画面
   a) Validate
2) 確認画面
   a) 戻るボタン --> 1)入力画面へ戻る
   b) OKボタン --> DB更新処理などを行い 3)結果画面へ
3) 結果画面


Q) ページ遷移をどのように処理するか?

   現在、以下のような流れで処理しています。

   ブラウザアクセス http://<url>?app=xxx&action=yyy

   -> Controller Class
      (appとactionを解析して該当するAction Classを呼び出す)

(*)-> Action Class
      (Request Method(GET/POST) 及び $_POSTデータ、HTML_QuickForm
       のValidateの結果を元に実行する処理を決定、該当する
       Sub Action Classを初期化して呼び出し)

   -> Sub Action Class
      (データ処理を実行、表示するView ClassをController Classに返す)

   -> Controller Class
      (返されたView Classを呼び出し)

   -> View Class
      (HTML_QuickForm及び$_SESSIONからデータを取得、Smartyを使って
       画面生成、表示)


質問は(*)のAction Class内の処理分岐です。

このAction Class内では、

1) GETアクセスの場合は新規アクセス
2) POSTアクセスの場合は、a)確認画面から戻ってきたか、
   b)Validateでエラーになったか

と判断し、実行するSub Actionを決定しています。
Action Classが
"Sample_Input_Action" とすると、
Sub Action Classは
"Sample_Input_Action_Input" (入力画面を表示)
"Sample_Input_Action_DBUpdate" (更新処理後、結果画面を表示)
のようになります。

私のAction Classのソースではこの処理をベタに、

try {
  $sub_action = new Sample_Input_Action_Input($args)
  $sub_action->execute();
} catch (MyAppException $e) {
  ...
}

のように行っているのですが、ここが美しくないのです。

そこで、みなさんは複数ページのフォーム処理において、
処理の分岐をどのようにハンドリングしているのか、何か
ご意見/コメント等いただければと思います。

よろしくお願いします。



PHP-users メーリングリストの案内