$form->inputでラジオボタンを初期選択させる方法
$form->inputでラジオボタンを出力するときに、初期状態で値をどれか選択済にしておく方法。
$form->radioによる方法は調べれば出てきますが、$form->inputは見当たらなかったので・・・
結果論、$form->radioとほぼ同じでした。
Thanks for 「cakephpは困ったらソースコードを見に行けば、たいていのことは理解できる。可愛いヤツだ。」
$form->radioによる方法
[cakephp]cakephp1.2でラジオボタンを初期選択させる方法
CakePHP html ヘルパーでラジオボタンの選択状態 (checked) を指定する方法 | Sun Limited Mt.
function radio($fieldName, $options = array(), $attributes = array())
の、$attributesに設定したvalueをデフォルト選択値にする仕様なのだそうです。
http://book.cakephp.org/ja/view/727/radio
$form->input解析
では$form->inputのソースを見てみると、$optionsに渡した内容から、$options['type']や$options['options']を抽出した残りを全て、$form->radioの$attributesに渡している模様。
function input($fieldName, $options = array()) { (中略) switch ($type) { case 'radio': $out = $before . $out . $this->radio($fieldName, $radioOptions, $options) . $between;
$form->input自体では、$options['value']の設定は基本使っていないようなので、
http://book.cakephp.org/ja/view/189/Automagic-Form-Elements
$options['value']を設定すれば、$form->radioに引き継がれて初期選択が設定されるはず。
という推論で、概ね*1以下のように記載で、radioボタンのデフォルト選択が実現できました。
$first = reset($profile_selects); $option = array( 'options' => array( 'type' => 'radio', 'value' => key($first), ) ); echo $this->Form->input('profile_type', $option);
ラジオボタン表示する項目($profile_selects)の最初をfirst()で抽出、value設定に使っています。
2番目、3番目あるいは特定の値を使うときは、ここを変えると良いでしょう。
CakePHPの好ましい点
最後に、この件を検索していて見つけた、上記にも紹介させて頂いた記事の中にあった名言そば。
それが、冒頭の引用。
「cakephpは困ったらソースコードを見に行けば、たいていのことは理解できる。可愛いヤツだ。」
[cakephp]cakephp1.2でラジオボタンを初期選択させる方法
この点、非常に同感です。
今まで「なんとなく」感じていた、CakePHPへの好意の一旦が、多分これだったのだろうと実感しました。
*1:実ソースは、別の処理の関係でメソッド分割など複雑化しているので、この記事向けに要約、というか翻訳しました