首先在模型中定义字段映射的方法
class Arctype extends CActiveRecord{
//定义字段映射
public $_map = array(
'typename'=>'a1',
'topid'=>'a2',
'sort'=>'a3',
'shuxing'=>'a4',
);
//定义字段映射的方法
public function mymap($data){
foreach($data as $k=>$v){
if(in_array($k,$this->_map)){
$key = array_search($k,$this->_map);
$map[$key] = $v;
}else{
$map[$k] = $v;
}
}
$this->attributes = $map;
}
//使用mymap方法时必须定义rules方法进行安全过滤
function rules() {
return array(
array('typename','required','message'=>'栏目名必须填写'),
array('topid','required','message'=>'上级栏目必须填写'),
); }
//使用mymap2方法时不用定义rules方法进行安全过滤
public function mymap2($data){
foreach($data as $k=>$v){
if(in_array($k,$this->_map)){
$key = array_search($k,$this->_map);
$this->$key = addslashes($v);
}else{
$this->$k = addslashes($v);
}
}
}
在控制器中使用字段映射填充字段
class ArctypeController extends Controller{
public function actionindex(){
$data = array(
'a1'=>'mya1',
'topid'=>'55',
'a3'=>'66',
'shuxing'=>'77',
);
$model = new Arctype();
$model->mymap($data);//使用字段映射填充字段
$this->dump($model->attributes);
$model->save()
}