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 相关文章推荐
笑谈配置,使用Smarty技术
Jan 04 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
PHP循环语句笔记(foreach,list)
Nov 29 PHP
php一些错误处理的方法与技巧总结
Aug 10 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
WordPress自定义时间显示格式
Mar 27 PHP
php结合web uploader插件实现分片上传文件
May 10 PHP
PHP实现支付宝即时到账功能
Dec 21 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
php-fpm中max_children的配置
Mar 15 PHP
php实现网页上一页下一页翻页过程详解
Jun 28 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调用三种数据库的方法(3)
2006/10/09 PHP
COM in PHP (winows only)
2006/10/09 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
浅谈Laravel队列实现原理解决问题记录
2017/08/19 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
Javascript select下拉框操作常用方法
2009/11/09 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
jquery验证邮箱格式是否正确实例讲解
2015/11/16 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
2017/10/12 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
js实现轮播图特效
2020/05/28 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
Python常用的json标准库
2019/02/19 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
Python如何创建装饰器时保留函数元信息
2020/08/07 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
巴西宠物商店:Cobasi
2019/04/19 全球购物
安全大检查反思材料
2014/01/31 职场文书
党员岗位承诺书
2014/03/25 职场文书
红色故事演讲稿
2014/05/22 职场文书
年检委托书
2014/08/30 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
同意报考证明
2015/06/17 职场文书
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers