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生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
Apr 10 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
PHP工厂模式的日常使用
Mar 20 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 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
图象函数中的中文显示
2006/10/09 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
php GUID生成函数和类
2014/03/10 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
php中关于换行的实例写法
2019/09/26 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
目前最全的python的就业方向
2018/06/05 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
python脚本后台执行方式
2019/12/21 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
HTML5中如何显示视频呢 HTML5视频播放demo
2013/06/08 HTML / CSS
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
幼儿园安全教育随笔
2015/08/14 职场文书
Go语言实现Snowflake雪花算法
2021/06/08 Golang
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers