Php Yii checkBoxList()带有选项的验证

Php Yii checkBoxList()带有选项的验证,php,validation,yii,options,Php,Validation,Yii,Options,我无法使用选项正确验证复选框列表: 这是表单配置中的元素 'benefits' => array( 'type' => 'checkboxlist', 'items' => \application\models\db\Option::items('application.benefits'), ), 这将从选项表中提取选项,并相应地填充复选框列表 它在HTML中填充得很好,当我尝试验证表单时,会遇到问题 Yii返回的实际验证错误为: 福利必须为1或0 验证代

我无法使用选项正确验证复选框列表:

这是表单配置中的元素

'benefits' => array(
    'type' => 'checkboxlist',
    'items' => \application\models\db\Option::items('application.benefits'),
),
这将从选项表中提取选项,并相应地填充复选框列表

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

Yii返回的实际验证错误为: 福利必须为1或0

验证代码如下所示:

array('benefits', 'boolean'),
array('attributeName', 'checkboxlistoptions', 'category' => 'category.table'),
所以问题是,如何根据数据库中已有的选项验证复选框列表

编辑:找到解决方案

下面的解决方案是我的规则,用于对照已选中的项目检查选项的复选框列表。参数为:

'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('benefits', 'boolean'),
array('attributeName', 'checkboxlistoptions', 'category' => 'category.table'),

希望这有帮助:)

您是否尝试过编写自己的验证规则?你的模型是什么样子的?模型只是带有规则的变量,使用的规则就是上面的规则。写我自己的规则?怎么会呢?哈,别担心。。您不是发送实际的optionId,而是将文本作为所选值发送。您介意在问题中添加生成的HTML的外观吗?另外,您将如何在复选框列表中存储数据?每个选项都有一个数据库列,还是将所有选项的字符串存储在一个列中?这将有助于了解如何编码验证…找到解决方案,请告诉我是否可以改进