0

我无法使用选项正确验证 checkBoxList:

这是表单配置中的元素

'benefits' => array(
    'type' => 'checkboxlist',
    'items' => \application\models\db\Option::items('application.benefits'),
),

这会从选项表中提取选项并相应地填充 checkBoxList。

它在 HTML 中填充得很好,当我尝试验证我遇到问题的表单时......

Yii 返回的实际验证错误是:Benefits 必须为 1 或 0。

验证代码如下:

array('benefits', 'boolean'),

所以问题是,如何根据数据库中已有的选项验证 checkBoxList?

编辑:找到解决方案

以下解决方案是我为检查已检查项目的选项复选框列表而制定的规则。参数是:

'category' => 'category.table'

规则如下(这将与其他规则一起进入表单模型:

public function checkboxlistoptions($attribute, $params)
    {
        $options = \application\models\db\Option::model()->items($params['category']);

        if(is_array($options) && is_array($this->$attribute)){
            foreach($this->$attribute as $item){
                $match = false;
                foreach($options as $optionID => $option)
                    if($item == $optionID) $match = true;

                if(!$match) $this->addError($attribute, 'Could not match option to item');
            }
        } else {
            $this->addError($attribute, 'Could not find options');
        }
    }

该规则的应用如下:

array('attributeName', 'checkboxlistoptions', 'category' => 'category.table'),

希望这可以帮助 :)

4

0 回答 0