Posted on

ラジオボタンを分けて表示する方法

普通にラジオボタンを下記のように作る時は問題ないのですが

$form->input("User.sex", array("type" => "radio","options" => array('1'=>'男性', '2'=>'女性')));

デザイン的にラジオボタンを分けて表示したい時があります。
とりあえず次のようにしてデザインの埋め込みたいところに記述します。

$form->input("User.sex", array("type" => "radio", "options" => array('1'=>'男性')));
$form->input("User.sex", array("type" => "radio", "options" => array('2'=>'女性')));

そうすると両方にhiddenのタグが付いてしまってラジオボタンの値を上手いこと取得してくれません。
そこで調べてみると初期値を指定してあげるとhiddenは出力しないということで

$form->input("User.sex", array("type" => "radio", "options" => array('1'=>'男性', 'value'=>'none')));
$form->input("User.sex", array("type" => "radio", "options" => array('2'=>'女性', 'value'=>'none')));

という感じに指定してあげました。
これで上手く行ったと思ったのですが確認画面に行ってから戻ってくるとラジオボタンのチェックが消えてしまっていました。

そこでさらに調べてみるとフォーラムでこんな解決策が載っていました。

$value = isset($form->data['User']['sex']) ? $form->data['User']['sex'] : -1;
$form->input("User.sex", array("type" => "radio", "options" => array('1'=>'男性', 'value'=>$value)));
$form->input("User.sex", array("type" => "radio", "options" => array('2'=>'女性', 'value'=>$value)));

これでラジオボタンのチェックが戻ってきた時に消える問題もなくなり、きちんと動くようになりました。