Motomichi Works Blog

その日学習したことについて書いている日記です。誰かの役に立ったらそれはそれで嬉しいです。

さくらvpsとcakephp2.6.7で開発日記 その0013 複数チェック可能なチェックボックス

参考にさせて頂いたページ

type="checkbox"のinput要素について

CakePHP 2.x - checkボックスを実装

(CakePHP2.x)Formヘルパーでチェックボックスを作成する | 日々の覚書…日常のことも少しだけ

select要素について

CakePHP 2.x - 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属性の一部になる文字列][]" //チェックしたものが配列で送信される

のような違いがある。

今回はここまで。