cakephp1.2 フォームのデフォルト値について
もう忘れたくないのでメモ。
以下のようなテキストボックスがあるとする。
<?php e($form->create('huga')); ?> <?php e($form->text('hoge')); ?>
このフォームをpostしてエラーになってもう一度表示した場合、自動で入力した値がセットされる。
次にDBから取得した値をデフォルト値としたい場合どうするか?以下はbadな例($dbはDBから取得した値)
<?php e($form->text('hoge', array('value' => $db['hoge']))); ?>
これをpostするとvalueの値はあくまで$data['hoge']をセットしようとするため、入力した値がセットされなくなってしまう。
cakephpにはdefaultという属性がある。これだとどうか。
<?php e($form->text('hoge', array('default' => $db['hoge']))); ?>
これだと初回だけvalueに$db['hoge']をセットしてそれ以降は無視する挙動になる。
これで一見良さそうに見えるが、post後に無駄に$db['hoge']をcontroller側でsetしないとエラーになるためこれもダメ。
ベストプラクティスはcontroller側でデフォルト値をセットすればよい。
controller
<?php $this->data['huga']['hoge'] = $db['hoge'];
html
<?php e($form->create('huga')); ?> <?php e($form->text('hoge')); ?>
formヘルパーのvalueには$this->dataの値がセットされるため、そこに直接デフォルト値を入れてやれば良い。
もちろんpost後は入力した値がセットされるため、$this->dataをいじる必要は無い。
二度と忘れないこと。