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 相关文章推荐
如何开发一个虚拟域名系统
Oct 09 PHP
php-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
php代码运行时间查看类代码分享
Aug 06 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
php ZipArchive压缩函数详解实例
Nov 06 PHP
国产PHP开发框架myqee新手快速入门教程
Jul 14 PHP
php修改指定文件后缀的方法
Sep 11 PHP
php去除数组中重复数据
Nov 18 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
php微信公众号开发之秒杀
Oct 20 PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 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
无线电的诞生过程
2021/03/01 无线电
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
window.ActiveXObject使用说明
2010/11/08 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
javascript验证手机号和实现星号(*)代替实例
2016/08/16 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
python自动识别文本编码格式代码
2019/12/26 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
python中sys模块是做什么用的
2020/08/16 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
工程造价自荐信
2013/10/09 职场文书
高速铁道技术专业求职信
2014/08/09 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
公司行政管理制度范本
2015/08/05 职场文书
导游词之崇武古城
2019/10/07 职场文书
使用Ajax实现无刷新上传文件
2022/04/12 Javascript