CakePHP 登録フォームの実装 其の二

11月 26, 2007 · Posted in CakePHP, PHP 

続きです。続けられました(1週間空いたけど)w
登録フォームの次は確認画面の表示です。厳密に言えば入力チェックが挟みますが、ひとまず確認画面ってことで。

  • 確認画面の表示
  • <input type=”hidden” …/> の自動生成

といった内容になっています。

確認画面、それは入力した内容を確認のため表示するという至極単純なページ。
単純なわりに、フォームと似て非なるものをつくるため工数がかさみます。

CakePHPではそこがちょっとは楽になるかなーと思ったのですが、特にこのありがちな流れを補完するような機能はないようですね。orz
とはいえ楽な部分もあります。
フォーム表示では、テキストボックスなどを表示するのに Htmlヘルパーを利用して、

  氏名: < ?php echo $html->input('Member/name'); ?>
フリガナ: < ?php echo $html->input('Member/kana'); ?>

などとしますが、確認画面を表示する際はこのフォームの*.thtmlファイルをコピペして

  氏名: < ?php echo $html->tagValue('Member/name'); ?>
フリガナ: < ?php echo $html->tagValue('Member/kana'); ?>

とすれば事足りる模様。これは置換すればいいだけで楽。 <input /> タグを強引に正規表現で置換してちょっと直すよりはずっといけてます。
プルダウンの表示などはこれだけでは済みませんが、これはこれで大分作業が楽ですね。

もう一つ必要な処理が、次の実行処理に必要なフォーム入力値の引き渡し。
今までは、<input type=”hidden” … /> を使ってたのですが、たくさんの入力項目があったりすると、すべてを記述していくのは面倒なもんです。
で、世の識者はどういう風にしているのかを調べてみると・・・

  • 確認画面表示時にセッションに保存し、実行時にセッションから引っ張る
  • 登録内容をひとまとめにして base64 などにエンコードして一つの hidden タグにまとめ、実行時にデコードして解析
  • 普通に hidden タグをゴリ書き

といったところのようです。どれも一長一短ですかね?セキュリティ面では2番目などがよいのかもしれません。セッションは何となく気分が悪いです(好みの問題)。
ま、自分は軽くオヤジはいっている古い人間なので、結局 3つめの方法に落ち着くことにした。
とはいえ、一つ一つ書くのはバカバカしいわけで考えてみたところ、POSTされた値から自動生成出来ますよね?(Ethnaではそういうメソッドがあるようでした)

というわけで独自にヘルパー作りました。内容は以下の通り

class HigeHelper extends Helper {
    var $helpers = array('Html');        // < -- Htmlヘルパー利用するため

    /**
     * 確認画面用の Hiddenタグを返す
     * 
     * @param   String  $modelName   モデル名
     * @return  String
     */
    function hiddenVars($modelName) {
        $ret = "";
        foreach ($this->data[$modelName] as $key => $val) {
            $ret .= $this->Html->hidden("$modelName/$key")."\n";
        }
        return $ret;
    }
}

超簡単でした。ヘルパー名は適当。髭

はじめの氏名・フリガナの用にモデル名を Member としてフォームを生成している場合は、

  < ?php echo $hige->hiddenVars('Member'); ?>

でOK。

たぶんこれでいけているはず。不具合あればご連絡下さい。またご利用は計画的に。


Comments

Leave a Reply