很多情况下,我们把页面表单中input的name设置为和数据表中字段名一样,方便获取和对数据库进行操作。但是这样存在一些安全隐患,为了避免字段名暴露,我们可以使用模型中的字段映射功能。
定义格式:
// 字段映射
protected $fieldsMap = array (
// '表单字段'=>'数据库字段'
);
## 映射方法
### fromForm自动映射
调用fromForm时,如果所有验证都成功,最后将会自动根据上面的定义进行映射。
### 手动执行映射
当然有时候也可以手动映射,手动把数据都set到模型中,最后执行一下映射即可。
格式:
parseFieldsMap([数据],[类型])
返回值是转换后的数据。
> 注意:转换后不会自动保存到模型中,如有需要请手动赋值:
$model->set($model->parseFieldsMap($data));
| 名称 | 描述 |
| -- | -- |
| 数据 | 要被映射数据,留空则为模型中存储的数据 |
| 类型 | 转换类型。可选值请看下表。默认为Model::TO_DB |
类型:
| 类型名 | 描述 |
| -- | -- |
| Model::TO_DB | 表单字段转数据库字段 |
| Model::TO_FORM | 数据库字段转表单字段 |
## 例子
映射定义:
protected $fieldsMap=array(
'xingming' => 'name',
'nianling' => 'age'
);
### formForm用法
获取规则定义:
protected $rules=array(
'reg'=>array(
// 都不验证直接获取
array('name'=>'xingming'),
array('name'=>'nianling'),
)
);
获取数据:
$model->fromForm('reg');
模型中数据:
array(
'name' => '宇润',
'age' => 5
)
### 手动映射用法
#### 转为数据库字段
$data1 = array(
'xingming' => '宇润',
'nianling' => '5'
);
var_dump($model->parseFieldsMap($data1,Model::TO_DB));
输出:
array (size=2)
'name' => string '宇润' (length=6)
'age' => string '5' (length=1)
#### 转为表单字段
$data2 = array(
'name' => '宇润',
'age' => '5'
);
var_dump($model->parseFieldsMap($data2,Model::TO_FORM));
输出:
array (size=2)
'xingming' => string '宇润' (length=6)
'nianling' => string '5' (length=1)



