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中的cookie
Nov 26 PHP
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
php中模拟POST传递数据的两种方法分享
Sep 16 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
Nov 26 PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 PHP
php中创建和调用webservice接口示例
Jul 25 PHP
php导出中文内容excel文件类实例
Jul 06 PHP
PHP+Ajax实现验证码的实时验证
Jul 20 PHP
php 算法之实现相对路径的实例
Oct 17 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 PHP
PHP项目多语言配置平台实现过程解析
May 18 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+javascript的日历控件
2009/11/19 PHP
将一维或多维的数组连接成一个字符串的php代码
2010/08/08 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
动手学习无线电
2021/03/10 无线电
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
深入理解JavaScript定时机制
2016/10/27 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
Python中设置变量访问权限的方法
2015/04/27 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python构建图像分类识别器的方法
2019/01/12 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
Python列表list操作相关知识小结
2020/01/29 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
Python分类测试代码实例汇总
2020/07/23 Python
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
2014年预备党员学习两会心得体会
2014/03/17 职场文书
毕业生面试求职信
2014/06/23 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL
Python OpenCV实现图像模板匹配详解
2022/04/07 Python