🕌
CakePHPのFormのデフォルト値
はじめに
Cake\View\Helper\FormHelper::control(string $fieldName, array $options = [])
の第二引数$optionsでdefaultを設定してもその設定した値が適応されない場合があったのでどの値が適応されるのか調べてみました。
$this->Form->control('hoge', [
'default' => true,
]);
前提条件
formのcontextがEntittyの場合($this->Form->create()の第一引数にEntityをいれている)で
Postリクエスト前のフォームのデフォルト値に関する話になります。
調査した際のCakePHPのバージョンは4.4です。
調査結果
-
Form->control()
の第二引数$optionsでval
,value
,schemaDefault
が設定されていない場合はdefault
の値が適応される- ただし
default
がnullの場合はデータベースのカラムに設定されたデフォルト値が適応される。- データベースのカラムのデフォルト値を適応したくない場合はoptionsで
schemaDefalt => false
を設定する
- データベースのカラムのデフォルト値を適応したくない場合はoptionsで
-
CheckboxWidget
を使ったチェックボックスの場合は$optionsのdefault
で設定した値よりchecked
の値が優先される(optionsが'type' => 'select', 'multiple' => 'checkbox'
の場合はMultiCheckboxWidget
が使われる)
- ただし
- optionsで
val
もしくはvalue
に値が設定されている場合はdefault
の値より優先されてその値が適応される。-
val > value > default
の優先順でデフォルト値が適応される
-
例
①例えば下記の様になっていた場合はvalの値が優先される。オプションの順番は関係ない。
$this->Form->control('title', [
'value' => 'hoge1',
'default' => 'hoge2',
'val' => 'hoge3',
]);
②データベースでデフォルト値に1が設定されている場合でも、ラジオボタンで未選択にしたい場合は下記の様にschemaDefault => false
に設定する。default => null
ではなくdefault => ''
でもOK
$this->Form->control('is_true', [
'type' => 'radio',
'options' => [0 => 'いいえ', 1 => 'はい'],
'default' => null,
'schemaDefault' => false,
]);
Discussion