[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();?>
これだけー
お手軽!