checkboxで複数選択の項目を作る場合、cakephpでは次のように書く説明がよくみられます。
$options = array('foo','var');
$formdata = $_POST['data'][フィールド名];
$this->form->input("フィールド名",
array(
'type'=>'select',
'multiple' => 'checkbox',
'div'=>false,
'label'=>false,
'legend'=>false,
'options' = $options,
'selected' = $formdata,
)
);
確かに複数で出力される。
だがしかし!「’div’=>false」が効いてない(´・ω・`)
チェックボックスを横並び出来ないっていう。。。。
ソース追いかけたらdivオプション自体がシカトされてる。
皆どうしてるんだろう???
そもそも$this->form->inputは色々な機能を盛り込んだ$this->form->xxxxのalias的な物
エラーメッセージの出力なども自動でやってくれる便利な子ではあります。
色々共通化した結果の歪がこれなんでしょうね。
けど、CakePHPってこうした落とし穴がところどころ存在して悩まされる。
普通に使うFormヘルパーにもこんな落とし穴作るとかもうダメダメじゃん。。。
何でこんなフレームワークが日本でたくさん使われてるのかマジ理解不能。
さらに今回はフィールド名のところを空にしたり、name属性を調整したりと
ソース踏襲の為にFormヘルパーを使て次のように対応
$options = array('foo','var');
$formdata = $_POST['data'][フィールド名];
$i=0;
foreach($options as $val){
$checked=false;
if( $data[フィールド名][$i] == $val ) $checked = true;
echo '<label>';
echo $this->Form->input(false,
array("name"=>"data[フィールド名][$i]","type"=>"checkbox",'label'=>false,'div'=>false,'value'=>$val,"checked"=>$checked));
echo $val.'</label> ';
$i++;
}
if(isset($errors[フィールド名])) echo '<div class="error-message">'.$errors[フィールド名][0].'</div>';
第1引数のフィールド名をfalseにして色々な機能をOffにして対応。
とりあえず目的の事は出来た。
で、テストしてたら何故だか直前の入力フィールドのエラーメッセージがこのcheckboxに反映されるという
奇々怪々な現象が発生。
いやね、最初は私がフィールド名を間違って書いたのかと思いましたよ。
けどそうじゃなかった!!
inputメソッドの第1引数にフィールド名を指定して使った後に
inputメソッドの第1引数にfalseを使うと、前者のエラーメッセージを拾い上げてくれる優れもの!
もう失笑です。
‘error’=>false
のオプションを追加して非表示にできたけどもさ。。。
もうほんと、なんだかなぁ~って感じです。
昔から不勉強を棚に上げて「使いにくいから!」とFormヘルパーを使わずにゴリゴリPHPコード書いてたんだけど、
やっぱりその方法が正解のようです。
ちなみにバージョンは2.7.8です。