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です。