IE6 で実験してみたところ、チェックボックスというのは、
という動作をするようだ。 この何も返さないというのが曲者だったりする。
フォーム値が空でも検証を通過してしまう。 後でデータベースへの入力に使おうとした場合に不便。
チェックがされていないと、 「〜を選択して下さい」と再入力を促されてしまう。
こんなフィルタを適用しようとしてみた。
function _filter_boolean($value)
{
return ($value) ? 1 : 0;
}
しかし、そもそも何の値も渡って来ていないので、 フィルタが適用されず、フォーム値は空のまま。
ということで、 'type' => VAR_TYPE_BOOLEAN なチェックボックスをサーチして、 値を変換するメソッドを、ActionForm クラスに追加してみた。
function filterBooleanCheckbox()
{
foreach ($this->form as $name => $def) {
if ($def['type'] == VAR_TYPE_BOOLEAN &&
$def['form_type'] == FORM_TYPE_CHECKBOX) {
$this->form_vars[$name] = ($this->form_vars[$name]) ? 1 : 0;
}
}
}
このメソッドを $this->af->validate() する前に呼び出せば、
という値が、チェックボックスのフォームから得られるようになる。