[CakePHP][View] よくある確認画面でのhiddenデータの持ち回り

2008/12/10追記
コメントでアドバイスをいただいたので、ヘルパーを改良しました。この記事はこのまま残します。改良したヘルパーは下記の記事に掲載しました。
よくある確認画面でのhiddenデータの持ち回り ver2



CakePHP1.2RC3を利用しています。

よくある画面遷移に、フォーム画面→確認画面→登録完了画面 があります。確認画面ってどれほど効果があるか良く分からないし、実装すると以外に手間がかかって嫌なんですが、避けては通れません。

とりあえず、確認画面で、登録ボタンを押して登録完了画面に遷移する際に、hiddenでフォーム入力された値を持っておく必要があります(セッションに入れてもいいけど)。また、入力画面に戻るボタンにもhiddenでフォームの値を持たせたりします。

とりあえずこれをお手軽に出来るフォームヘルパーです。誰か忘れてしまったのですが、誰かの記事を元にして自分用にカスタマイズして使ってました。

チェックボックスや、ファイルアップロードなど、データがセットされる箇所に配列がセットされる場合があり、そのために配列の配列までチェックしてhiddenに自動セットするようにしました。例えば、チェックボックスでは、

<?php echo $form->checkbox( 'Fuga.hoge][1', $options = array('value' => 1, 'checked' => $course_check[1] )); ?>hoge1
<?php echo $form->checkbox( 'Fuga.hoge][2', $options = array('value' => 2, 'checked' => $course_check[2] )); ?>hoge2
<?php echo $form->checkbox( 'Fuga.hoge][3', $options = array('value' => 3, 'checked' => $course_check[3] )); ?>hoge3

というようにすると、

$this->data[Fuga][hoge][1] => 1
$this->data[Fuga][hoge][2] => 2
$this->data[Fuga][hoge][3] => 3

というように同一name属性内で配列データとしてPOSTしてくれます。


このような場合でもうまく確認画面のhiddenで引き回します。

具体的なヘルパーは下記です
app/views/helpers/formhidden.php

<?php
class FormhiddenHelper extends AppHelper {
    var $helpers = array('Form');       

    function hiddenVars($modelName) {
        $ret = "";

        foreach ($this->data[$modelName] as $key => $val) {

        	if(is_array($val)){
				foreach( $val as $key2 => $val2 ){
					$ret .= $this->Form->hidden("$modelName.$key.$key2")."\n";

				}
        	}else{
	            $ret .= $this->Form->hidden("$modelName.$key")."\n";
        	}

        }
        return $ret;
    }
}
?>


これを使う場合は、コントローラで、

var $helpers = array('Formhidden');

というようにしてヘルパーを読み込んでおき、確認画面で下記のようにします

<?php $modelname = $this->name; ?>

<?php echo $form->create($modelname, array( 'url' => 'addcomplete' ) );?>

	<?php echo $formhidden->hiddenVars($modelname); ?>

	<input type="image" src="/images/save_btn.jpg" width="99" height="30" type="submit" />

<?php echo $form->end();?>

これだけー
お手軽!