$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:実ソースは、別の処理の関係でメソッド分割など複雑化しているので、この記事向けに要約、というか翻訳しました