ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
很多情况下,我们把页面表单中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) ~~~