ThinkPHP表单数据智能写入create方法实例分析


Posted in PHP onSeptember 27, 2015

本文实例讲述了ThinkPHP表单数据智能写入create方法。分享给大家供大家参考。具体如下:

创建数据对象 create()

除了手动构造入库的数据集之外,ThinkPHP 还提供了自动创建数据对象的 create() 方法。create() 方法将自动收集提交的表单数据并创建数据对象而无需人工干预,这在表单数据字段非常多的情况下更具优势。

将前文写入表单数据的例子用 create() 来实现:

public function insert2(){
 header("Content-Type:text/html; charset=utf-8");
 $Dao = M("User");
 if($Dao->create()){
  $Dao->password = md5($_POST["password"]);
  $Dao->regdate = time();
  if($lastInsId = $Dao->add()){
   echo "插入数据 id 为:$lastInsId";
  } else {
   echo "数据写入错误!";
  }
 }else{
  exit($Dao->getError().' [ <a href="javascript:history.back()">返 回</a> ]');
 }
}

create() 创建数据对象后,将自动收集提交过来的表单数据。而表单数据可能需要经过一定加工(例如将密码加密)才能写入数据表,所以可以对数据对象的成员属性值根据进行修改或添加去除等。

提示:create() 创建的数据对象存放于内存,在执行入库动作(add() 或 save())之前,都可以进行修改。

在上面的例子里,create()方法 的行为和 date()方法 是一致。但 date() 方法只是简单的创建数据对象,但 create() 方法还具备:

① 令牌验证
② 数据自动验证
③ 字段映射支持
④ 字段类型检查
⑤ 数据自动完成

等各种高级的数据功能,要完成这些高级数据模型功能,需要使用 D方法 实例化数据模型。ThinkPHP 提供了各种验证与填充规则供调用,具体可参见《ThinkPHP 自动验证》与《ThinkPHP 自动填充》相关文章。

自动验证与自动填充

在将表单写入数据表之前,常常会有一些对数据的检测(提交的用户名是否符合要求)与处理(如例子中的密码加密以及取得当前时间戳)。create() 方法就支持数据的自动验证与自动完成。

在 LibModel 目录下创建 UserModel.class.php 文件(User 为创建的模型对象,也对应 前缀_user 表),加入自动验证和自动填充规则:

class UserModel extends Model{
 // 自动验证设置
 protected $_validate = array(
  array('username','require','用户名必须填写!',1),
  array('email','email','邮箱格式错误!',2),
  array('username','','用户名已经存在!',0,'unique',1),
 );
 //自动填充设置
 protected $_auto = array(
  array('regdate','time',self::MODEL_INSERT,'function'),
  array('password','md5',self::MODEL_INSERT,'function'),
 );
}

将 insert2 操作更改为:

public function insert2(){
 header("Content-Type:text/html; charset=utf-8");
 $Dao = D("User");
 if($Dao->create()){
  if($lastInsId = $Dao->add()){
   echo "插入数据 id 为:$lastInsId";
  } else {
   echo "数据写入错误!";
  }
 }else{
  exit($Dao->getError().' [ <a href="javascript:history.back()">返 回</a> ]');
 }
}

如果提交的数据不符合验证要求(如用户名存在),则 create() 创建数据对象失败(返回 FALSE ),$Dao->getError() 会打印出自动验证设置规则里面设置的提示信息:用户名已经存在!

如果验证规则通过后,系统会进行自动填充设置,将表单密码进行 MD5 加密以及取得当前的时间戳填充入 create() 的数据对象。

所以 D方法 配合 create() 是非常智能而强大的,恰当运用可以达到事半功倍快速开发的目的。

提示:

① D 方法配合 create() 由于其功能强大,也就损失了一定的效率,在业务逻辑不复杂的情况下推荐 M方法+data() 模式

② create() 默认接受 POST 数据,若要接受其他类型数据,只需在参数内指定即可,如接受 GET 数据:create($_GET)

希望本文所述对大家基于ThinkPHP框架的php程序设计有所帮助。

PHP 相关文章推荐
PHP入门速成(2)
Oct 09 PHP
php中模拟POST传递数据的两种方法分享
Sep 16 PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
PHP合并静态文件详解
Nov 14 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
Feb 14 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
PHP实现Google plus的好友拖拽分组效果
Oct 21 PHP
浅谈Laravel队列实现原理解决问题记录
Aug 19 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 11 PHP
PHP网站常见安全漏洞,及相应防范措施总结
Mar 01 PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 #PHP
ThinkPHP中数据操作案例分析
Sep 27 #PHP
PHP中两个float(浮点数)比较实例分析
Sep 27 #PHP
用php代码限制国内IP访问我们网站
Sep 26 #PHP
十大使用PHP框架的理由
Sep 26 #PHP
PHP弹出对话框技巧详细解读
Sep 26 #PHP
ThinkPHP2.x防范XSS跨站攻击的方法
Sep 25 #PHP
You might like
PHP date函数参数详解
2006/11/27 PHP
用Simple Excel导出xls实现方法
2012/12/06 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Java分治归并排序算法实例详解
2017/12/12 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
学习python的前途 python挣钱
2019/02/27 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
空指针到底是什么
2012/08/07 面试题
工作会议主持词
2014/03/17 职场文书
同居协议书范本
2014/04/23 职场文书
空气的环保标语
2014/06/12 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
企业战略合作意向书
2015/05/08 职场文书
呐喊读书笔记
2015/06/30 职场文书
Python 数据可视化工具 Pyecharts 安装及应用
2022/04/20 Python