🕌
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