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 代码优化的42条建议 推荐
Sep 25 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
Jun 06 PHP
php给图片添加文字水印方法汇总
Aug 27 PHP
php获取远程文件的内容和大小
Nov 03 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
给大家分享几个常用的PHP函数
Jan 15 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 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 年龄计算函数(精确到天)
2012/06/07 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
JS小框架 fly javascript framework
2009/11/26 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
asm.js使用示例代码
2013/11/28 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
Vue结合原生js实现自定义组件自动生成示例
2017/01/21 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
Python实现批量读取word中表格信息的方法
2015/07/30 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
详解python的argpare和click模块小结
2019/03/31 Python
Linux下远程连接Jupyter+pyspark部署教程
2019/06/21 Python
PyTorch预训练的实现
2019/09/18 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
Python urllib.request对象案例解析
2020/05/11 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
浅谈Python __init__.py的作用
2020/10/28 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
违纪检讨书2000字
2014/02/08 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
浅谈Redis的keys命令到底有多慢
2021/10/05 Redis