CakePHPまとめ@Wiki
ラジオボタンのNULLチェック
最終更新:
nezox
Html
Helperのradioを生成する時、ラジオボタンの前に同じnameのhiddenを生成する事で、チェックが一つも無かった場合でもValidation出来るようにします。
/cake/libs/view/helpers/html.phpを改造します。
radio関数に下記のように追記します。
---この部分を追記します-------
// Auto Render Hidenn For Null Check / Nezox:2006.08.12
$out[] = sprintf($this->tags['hidden'], $this->model, $this->field,
$this->parseHtmlOptions(array('value'=>'')), null);
----------------------------------------
【/cake/libs/view/helpers/html.php】
/**
* Creates a set of radio widgets.
*
* @param string $fieldName Name of a field, like this "Modelname/fieldname"
* @param array $options Radio button options array
* @param array $inbetween String that separates the radio buttons.
* @param array $htmlAttributes Array of HTML attributes.
* @param boolean $return Wheter this method should return a value or output
it. This overrides AUTO_OUTPUT.
* @return mixed Either string or boolean value, depends on AUTO_OUTPUT and
$return.
*/
function radio($fieldName, $options, $inbetween = null, $htmlAttributes =
array(), $return = false) {
$this->setFormTag($fieldName);
$value = isset($htmlAttributes['value']) ? $htmlAttributes['value'] :
$this->tagValue($fieldName);
$out = array();
// Auto Render Hidenn For Null Check / Nezox:2006.08.12
$out[] = sprintf($this->tags['hidden'], $this->model, $this->field,
$this->parseHtmlOptions(array('value'=>'')), null);
foreach($options as $optValue => $optTitle) {
$optionsHere = array('value' => $optValue);
$optValue == $value ? $optionsHere['checked'] = 'checked' : null;
$parsedOptions = $this->parseHtmlOptions(array_merge($htmlAttributes,
$optionsHere), null, '', ' ');
$individualTagName = "{$this->field}_{$optValue}";
$out[] = sprintf($this->tags['radio'], $this->model, $this->field,
$individualTagName, $parsedOptions, $optTitle);
}
$out = join($inbetween, $out);
return $this->output($out ? $out : null, $return);
}