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
PHP_MySQL教程-第一天
Mar 18 PHP
require(),include(),require_once()和include_once()区别
Mar 27 PHP
MySQL数据源表结构图示
Jun 05 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
Jun 21 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
Sep 23 PHP
php中hashtable实现示例分享
Feb 13 PHP
php使用websocket示例详解
Mar 12 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
YII分模块加载路由的实现方法
Oct 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
php实现的MySQL通用查询程序
2007/03/11 PHP
JavaScript中Math对象使用说明
2008/01/16 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
JSON格式化输出
2014/11/10 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
Python threading多线程编程实例
2014/09/18 Python
Python 操作MySQL详解及实例
2017/04/30 Python
Python文件操作之合并文本文件内容示例代码
2017/09/19 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
啤酒销售实习自我鉴定
2013/09/24 职场文书
手机促销活动方案
2014/02/05 职场文书
《花的勇气》教后反思
2014/02/12 职场文书
努力学习演讲稿
2014/05/10 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
工作检讨书大全
2015/01/26 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书
2015年档案室工作总结
2015/05/23 职场文书
六一儿童节主持开场白
2015/05/28 职场文书