## 数据预处理(V3.1新增功能)
当有下面这样的需求时,我们可以使用通用的数据新增模型common_add来添加数据,其中小程序标签字段是一个checkbox类型的多选项。
![](https://box.kancloud.cn/765ffa01379f403cda7db9c54b506329_1525x915.png)
我们可以用下面这样的代码来生成一个数据新增表单
```
/**
* 添加小程序
*/
public function add() {
$this->setMetaTitle('添加小程序')
->addCrumb('系统管理', U('Index/index'), '')
->addCrumb('小程序管理', U('lists'), '')
->addCrumb('添加小程序', '', 'active')
->addNav('添加小程序', '', 'active')
->addFormField('name', '小程序名称', 'text')
->addFormField('created_by', '发布者名称', 'text')
->addFormField('logo', '小程序LOGO', 'image')
->addFormField('qrcode', '小程序二维码', 'image')
->addFormField('created_at', '小程序发布时间', 'time')
->addFormField('tags', '小程序标签', 'checkbox', array('options'=>'callback','callback_name'=>'getTags', 'pre_type'=>'callback', 'pre_name'=>'implode'))
->addFormField('description', '小程序简介', 'textarea')
->setModel('app')
->addValidate('name', 'require', '小程序名称必填', 1, 'regex', 3)
->common_add();
}
```
我们在生成一个checkbox多选框的时候用到了这样的代码,其中第四个参数是array类型,'options'=>'callback'表示我们需要用一个当前控制器的方法来动态生成checkbox的数据,'callback_name'=>'getTags'表示我们用到的callback方法名是getTags。
```->addFormField('tags', '小程序标签', 'checkbox', array('options'=>'callback','callback_name'=>'getTags', 'pre_type'=>'callback', 'pre_name'=>'implode'))
```
我们可以看一下用来动态生成checkbox数据项的callback方法“getTags”
```
/**
* 获取所有标签
*/
public function getTags() {
$tags = M('app_tag')->select();
$options = array();
foreach ($tags as $k => $v) {
$options[$v['id']] = $v['name'];
}
return $options;
}
```
因此用上面的代码写完了之后,我们可以看到视图呈现的效果就是这样的:
![](https://box.kancloud.cn/26b48ab65907d669fcec226415d13603_973x119.png)
跟text、textarea、option、select这样的视图控件不同,checkbox控件是一个多选项,在勾选了几个选项并点击提交后,我们调试可以看到post的数据中tags字段选择的值是这样的:
![](https://box.kancloud.cn/865d0b986bccc9cdf7a7040a97fca132_208x333.png)
现在的需求是:我们的数据表字段tags是varchar类型的,我们希望能对提交过来的tags数据用逗号进行连接,并存入数据表。
于是我们可以用到V3.1新增的空间选项pre_type和pre_name。按照下面的代码,我们用'pre_type'=>'callback'指定当前控制器的一个方法来对提交的数据中的tags字段进行预处理,用'pre_name'=>'implode'指定用来进行预处理的方法名为'implode'。
```
->addFormField('tags', '小程序标签', 'checkbox', array('options'=>'callback','callback_name'=>'getTags', 'pre_type'=>'callback', 'pre_name'=>'implode'))
```
来看一下预处理方法是实现
``` /**
* 字符串连接
*/
public function implode($value) {
return implode(',', $value);
}
```
加上预处理代码后我们再来提交数据,调试一下可以发现tags的数据已经用逗号分隔了。
![](https://box.kancloud.cn/3500c0fcfe900978eeec140302ad7486_251x203.png)
>[info] 数据预处理功能可以让豆信封装的通用数据增删改查模型更为强大,开发者可以根据自己需要的数据格式选择合适的数据预处理方式。
- 更新日志
- 入门
- 关于豆信
- 系统安装
- 功能介绍
- 公众号对接
- 小程序对接
- 系统架构
- 数据字典
- 框架目录结构
- 插件目录结构
- 运行流程
- 插件开发
- 新建插件
- info.php
- 设计数据表
- 插件控制器
- 后台管理控制器
- 移动端控制器
- 交互响应控制器
- 接口管理控制器
- 插件模型
- 插件视图
- 发布插件
- 自定义模型
- 通用增删改查
- common_lists
- common_add
- common_edit
- common_delete
- setMetaTitle
- setSubmitType
- setModel
- setListMap
- setListSearch
- setListOrder
- setListPer
- setEditMap
- setDeleteMap
- setFindMap
- addCrumb
- addNav
- addButton
- setTip
- 函数手册
- get_addon
- get_addon_settings
- tomedia
- get_fans_info
- 小程序开发专题
- 小程序对接插件.js
- 获取插件配置
- 获取用户信息
- 更新用户资料
- 公众号开发专题
- 获取粉丝信息
- 自定义分享
- 消息上下文
- 微信支付
- 企业付款
- 发送现金红包
- 发送模板消息
- 发送客服消息
- 引入前端资源
- 限制页面仅在微信浏览器访问
- 在插件页面中引入样式文件
- 在插件中创建跳转链接
- 数据预处理
- 插件开发实例
- 聊天机器人
- 留言板
- 常见问题解答