参考にさせて頂いたページ
type="checkbox"のinput要素について
(CakePHP2.x)Formヘルパーでチェックボックスを作成する | 日々の覚書…日常のことも少しだけ
select要素について
フォームヘルパー全般
FormHelper — CakePHP Cookbook 2.x ドキュメント
今回自分が使用した記述
複数チェックできるようにするには以下のような感じで書いたものを、foreachで繰り返し出力した。
<?php //複数選択可能なチェックボックス echo $this->Form->input( 'name属性の一部になる文字列', array( 'errorMessage' => false, //エラーメッセージは任意の場所に表示したいのでfalse 'label' => false, //ここのlabel要素は不要なのでfalse 'checked' => false, //動的に変更すると良いけどひとまずfalse 'hiddenField' => false, //type="hidden"のinput要素は今回不要なのでfalse 'options' => array( 'value属性に入る文字列' => 'label要素に入る文字列' //value => label ), 'type' => 'select', //select要素または複数選択可能なcheckboxを出力したいので'select' 'multiple'=> 'checkbox', //typeと併せて、true,false,checkboxのいずれかを指定するけど今回はcheckbox ) ); ?>
上記のように
'type' => 'select', 'multiple'=> 'checkbox',
を指定することで、複数選択可能なcheckboxが出力されて、ユーザがチェックした値は配列に格納される。
ハマっていたこと
checkboxを出力するには
<?php echo $this->Form->checkbox( 'name属性の一部になる文字列', array( 'hiddenField' => false, 'label' => 'label要素に入る文字列', ) ); ?>
とか
<?php echo $this->Form->input( 'name属性の一部になる文字列', array( 'hiddenField' => false, 'label' => 'label要素に入る文字列', 'type' => 'checkbox', ) ); ?>
とするものだと思い込んでいたけど、実際やってみたらチェックしたうちの最後の一個しか送信されてなかった。
まさか'type' => 'select'
を使用するとは。
出力されるinput要素のnameに違いがあり、
name="data[Model名][name属性の一部になる文字列]" //ひとつだけしか送信されない
と
name="data[Model名][name属性の一部になる文字列][]" //チェックしたものが配列で送信される
のような違いがある。
今回はここまで。