Php 保存复选框列表数据并检索用户';创建新记录时上次检查的项目

Php 保存复选框列表数据并检索用户';创建新记录时上次检查的项目,php,yii,checkboxlist,Php,Yii,Checkboxlist,我有一个带有“类别”栏的产品模型。此列应该能够包含复选框列表中的数据。 每当用户创建新产品时,我希望表单显示“类别”复选框,并将项目设置为用户上次创建的产品中的活动项目 例如,“类别”复选框列表包含“电影”和“音乐”项。当用户选中“电影”并创建产品时,下次用户去创建产品时,“电影”已被选中(因为它保存了用户先前创建产品时的选择) 我相信以下是实现这一目标的最有效的编码步骤: 创建产品时:选中的项目保存到产品模型中的“类别”列,以及用户“配置文件”模型中的“类别”列 应在产品的创建表单中检索用户上

我有一个带有“类别”栏的产品模型。此列应该能够包含复选框列表中的数据。 每当用户创建新产品时,我希望表单显示“类别”复选框,并将项目设置为用户上次创建的产品中的活动项目

例如,“类别”复选框列表包含“电影”和“音乐”项。当用户选中“电影”并创建产品时,下次用户去创建产品时,“电影”已被选中(因为它保存了用户先前创建产品时的选择)

我相信以下是实现这一目标的最有效的编码步骤:

创建产品时:选中的项目保存到产品模型中的“类别”列,以及用户“配置文件”模型中的“类别”列

应在产品的创建表单中检索用户上次保存的类别(“概要文件模型中的类别”列)。 产品模型表单视图中的代码:

<?php echo $form->checkBoxList($model, 'categories', array('movies'=>'Movies','music'=>'Music')); ?>

(我不确定在哪里为活动值设置数组)

我需要使用explode(“,”,$model->categories)将所选复选框的数组转换为字符串,以便使用ProductController的actionCreate函数将其放入“产品”和“配置文件”模型的“类别”列中

然后,要将用户最后选择的复选框列表项设置为在Product _form视图中处于活动状态,我需要通过内爆列ie implode(“,”,$user->profile->categories)将$model->categories数据转换回数组


您将如何在Yii中对此进行编码?

使用
CHtml::ckeckboxList
而不是
activecheckbox
。 它已经选择了参数。选中的是键=>值对数组。yiiframew.com/doc/api/1.1/CHtml#复选框列表详细信息

或者您可以重写(扩展)您的CHtml帮助程序来解析您的格式

例如:

公共静态函数activeCheckBoxList($model、$attribute、$data、$htmlOptions=array()) {

然后只需将
'explode\u format'=>true
添加到您的htmloptions for activecheckboxlist中。类似这样的操作就可以了

        self::resolveNameID($model,$attribute,$htmlOptions);
    if(array_key_exists('explode_format',$htmlOptions))
    {
        $selection=explode($model->$attribute);
        unset($htmlOptions['explode_format']);
    }
        else{
        $selection=self::resolveValue($model,$attribute);
        }
    if($model->hasErrors($attribute))
        self::addErrorCss($htmlOptions);
    $name=$htmlOptions['name'];
    unset($htmlOptions['name']);

    if(array_key_exists('uncheckValue',$htmlOptions))
    {
        $uncheck=$htmlOptions['uncheckValue'];
        unset($htmlOptions['uncheckValue']);
    }
    else
        $uncheck='';

    $hiddenOptions=isset($htmlOptions['id']) ? array('id'=>self::ID_PREFIX.$htmlOptions['id']) : array('id'=>false);
    $hidden=$uncheck!==null ? self::hiddenField($name,$uncheck,$hiddenOptions) : '';

    return $hidden . self::checkBoxList($name,$selection,$data,$htmlOptions);
}