Formヘルパーのラジオボタンの吐き出しがちょっとおかしい
$cakephp->version = "1.2.6";
フォームヘルパーでラジオボタンをグループで出そうと思いまして、初めはこう書いた。
<?php e($form->radio('sample.flg', array('0' => 'なし', '1' => 'あり'), array('legend' => false,'value' => '1'))); ?>
そうするとこういうHTMLが吐き出された。
<input type="radio" name="data[sample][flg]" id="SampleFlg0" value="0" /><label for="SampleFlg0">なし</label> <input type="radio" name="data[sample][flg]" id="SampleFlg1" value="1" checked="checked" /><label for="SampleFlg1">あり</label>
が、表示がコレだ。
斬新なラジオボタンの配置を提案してくれた。OH MY GOD.
ラベルを諦めると普通に表示されます。諦めるってのはこういうこと。
<?php e($form->radio('sample.flg', array('0' => 'なし', '1' => 'あり'), array('legend' => false,'value' => '1','label'=>false))); ?>
こう吐き出してくれたらいいのに~と思って、ソース追いかけてみた。
<label for="SampleFlg0">なし</label><input type="radio" name="data[sample][flg]" id="SampleFlg0" value="0" /> <label for="SampleFlg1">あり</label><input type="radio" name="data[sample][flg]" id="SampleFlg1" value="1" checked="checked" />
<?php //form.php 940行目 if ($label) { $optTitle = sprintf($this->Html->tags['label'], $tagName, null, $optTitle); } $out[] = sprintf( $this->Html->tags['radio'], $attributes['name'], $tagName, $parsedOptions, $optTitle ); //html.php 57行目 var $tags = array(..... 'radio' => '<input type="radio" name="%s" id="%s" %s />%s'
デフォルトはラベルを出力する。で、見ての通りsprintfで最後に整形した文字列を出すので、ラベルが最後に出力されるようになっている。そうすると、表示が崩れたラジオボタンが出てしまうようです。
解決するにはHelperのソースに手を入れるか、自分でHelperでも書くか、ベタにHTMLに書くしかないと思います。
僕はラベルに強い情熱が無かったので、今回は諦めちゃったけど><