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() する前に呼び出せば、
という値が、チェックボックスのフォームから得られるようになる。