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极大的增强功能和性能
Oct 09 PHP
模仿OSO的论坛(五)
Oct 09 PHP
php实现处理输入转义字符的代码
Nov 08 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
Sep 30 PHP
php版微信公众号接口实现发红包的方法
Oct 14 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
Oct 18 PHP
简单谈谈PHP中的trait
Feb 25 PHP
php 判断页面或图片是否经过gzip压缩的方法
Apr 05 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 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 array操作10个小技巧分享
2011/06/23 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
Angular(5.2-&gt;6.1)升级小结
2018/12/27 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
Python中使用PDB库调试程序
2015/04/05 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Django中Model的使用方法教程
2018/03/07 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
Python登录系统界面实现详解
2019/06/25 Python
python根据时间获取周数代码实例
2019/09/30 Python
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
管理学院毕业生自荐信范文
2014/03/10 职场文书
村抢险救灾方案
2014/05/09 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
HTTP中的Content-type详解
2022/01/18 HTML / CSS
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android