小さな問題..いくつかのシステム変数をシリアル化された配列として格納するテーブルがあります..私のモデルでは、このフィールドを設定して読み取り可能な形式にするための関数が必要です。彼らです:
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;
}
}
my before save と after find 関数は次のとおりです。
/**
*
*/
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]
。