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 相关文章推荐
WINDOWS服务器安装多套PHP的另类解决方案
Oct 09 PHP
一个改进的UBB类
Oct 09 PHP
PHP 强制下载文件代码
Oct 24 PHP
优化PHP程序的方法小结
Feb 23 PHP
解析yii数据库的增删查改
Jun 20 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
PHP session会话操作技巧小结
Sep 27 PHP
PHP链表操作简单示例
Oct 15 PHP
PHP精确计算功能示例
Nov 29 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
PHP设计模式概论【概念、分类、原则等】
May 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为php增加openssl模块的方法
2011/06/14 PHP
php分页示例分享
2014/04/30 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
基于jQuery的js分页代码
2010/06/10 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
Python中的is和id用法分析
2015/01/26 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
python进行参数传递的方法
2020/05/12 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
HTML5标签大全
2016/11/23 HTML / CSS
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
高中毕业生自我鉴定
2013/11/03 职场文书
高中校园广播稿
2014/01/11 职场文书
优秀毕业生事迹材料
2014/02/12 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
让子弹飞观后感
2015/06/11 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python