小问题..我有一个表,将一些系统变量存储为序列化数组。在我的模型中,我必须使用函数来设置并将该字段转换为可读形式。他们是:
public function setoptPramasString($value){
$this->opt_pramas = '';
$str1 = explode(',', $value);
foreach ($str1 as $str2) {
$myVal = explode('=>', $str2);
$this->opt_pramas[trim($myVal[0])] = (string)trim($myVal[1]);
echo "<BR>".$myVal[0]." => ".$myVal[1];
}
}
/**
*
*/
public function getoptPramasString(){
$str = '';
$x = 0;
foreach ($this->opt_pramas as $key => $value) {
if($x == 0){
$str .= $key."=>".$value;
$x++;
}else{
$str .= ", ".$key."=>".$value;
}
}
我的保存前和查找后功能是:
/**
*
*/
public function beforeSave(){
$this->opt_pramas = serialize($this->opt_pramas);
return parent::beforeSave();
}
/**
*
*/
public function afterFind(){
$this->opt_pramas = unserialize($this->opt_pramas);
return parent::afterFind();
}
我在控制器中的更新操作是:
public function actionUpdate($id)
{
$model=$this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['SystemMenuSearch']))
{
$model->attributes=$_POST['SystemMenuSearch'];
if($model->save()){
$this->redirect(array('view','id'=>$model->search_id));
}
}
$this->render('update',array(
'model'=>$model,
));
}
似乎正在发生的是beforeSave
函数在函数之前被调用setoptPramaString
。这是 Yii 中的错误还是我遗漏了什么?我的逻辑是,当将值设置为模型属性时,它将触发setoptPramaString
函数,然后在模型上调用 save 时,它将触发模型中的beforeSave
函数。我检查了我的表格,名字是正确的,SystemMenuSearch[optPramaString]
。