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的外观吗?另外,您将如何在复选框列表中存储数据?每个选项都有一个数据库列,还是将所有选项的字符串存储在一个列中?这将有助于了解如何编码验证…找到解决方案,请告诉我是否可以改进