CakePHP のチェックボックスで fieldset を使ってチェックボックスをグループ化する方法

CakePHP で以下のようなチェックボックスでカテゴリを選択させるようなフォームを作成する方法を紹介します。

通常のチェックボックスを作成するには

通常チェックボックスは以下のように第二引数の options に配列を入れることで生成することができます。本当に小規模なチェックボックスでしたらこれで問題ありません。

1
echo $this->Form->input('hoge', Array('multiple' => 'checkbox', 'options' => Array('test1', 'test2', 'test3')))

しかし、記事上部で紹介したような画像のように階層分けされたチェックボックスを出力するにはどうすれば良いのか分かりません。自分で fieldset を使ってフォームヘルパーを個別に出力しても不完全なチェックボックスが生成されます。

fieldset でグループ分けされたチェックボックを作成する

グループ分けされたチェックボックスを作成するには以下のように連想配列を使って生成することで実現可能です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Array
(
    [挨拶] => Array
        (
            [2] => おはよう
            [3] => こんにちは
            [4] => こんばんは
            [5] => おやすみ
            [6] => さようなら
            [7] => よろしく
        )
 
    [会話] => Array
        (
            [40] => 掛け声
            [41] => 区切り
            [42] => 問いかけ / 質問
            [43] => 相槌
            [44] => 電話
            [45] => ごまかす
            [65] => ボケ
        )
);

なんとなく入れてみたらできたので特に参考サイトはありません。チェックボックスで CakePHP のバリデーションを使う場合はおそらく独自のバリデーションルールを作成して対応する必要があります。そのためか、チェックボックスのヘルパーは少しデータの送信が微妙です。(モデル名から始めなくて良いところなど。)

コメント

コメントは受け付けていません。