FuelPHPでcheckboxのバリデーション

checkboxのバリデーション

公式サイトのValidationを参考に、checkboxのバリデーションを行ってみた。

流れ

  1. バリデーション用クラスを用意
  2. コントローラ側でバリデーション用クラスを呼び出し(add_callable)
  3. 該当のフォームにセット(add_rule)

fuel/app/classes/myvalidation.php

まずは、『classes』の直下にカスタムバリデーションクラスを用意。
『checkbox_val』では、選択された値の正当性をチェック、
『checkbox_require』では、選択項目の数をチェックする。

<?php
class MyValidation
{
    /**
     * 値の正当性チェック
     */
    public static function _validation_checkbox_val($val, $options)
    {
        if ($val) {
            if (!is_array($val)) {
                return false;
            }
            foreach ($val as $v) {
                if (!array_key_exists($v, $options)) return false;
            }
        }
        return true;
    }

    /**
     * 必須チェック
     *
     * $minで最低チェック数を指定
     */
    public static function _validation_checkbox_require($val, $min = null)
    {
        if (!$val || !is_array($val)) {
            return false;
        }

        $min_count = $min ? $min : 1;
        
        return count($val) >= $min_count;
    }
}

Controller

checkbox部分のみ抜粋

<?php
...
// checkbox
$check_list = array(
                  1 => '映画鑑賞',
                  2 => '散歩',
                  3 => 'その他'
              );
$form->validation()->add_callable(new MyValidation());
$form->add('hobby', '趣味', array('type' => 'checkbox', 'options' => $check_list))
     ->add_rule('checkbox_val', $check_list)
     ->add_rule('checkbox_require', 2);

これでチェックボックスの入力チェックのベースが出来た。