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 相关文章推荐
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
Oct 31 PHP
解析centos中Apache、php、mysql 默认安装路径
Jun 25 PHP
PHP 获取文件权限函数介绍
Jul 11 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
php的sprintf函数的用法 控制浮点数格式
Feb 14 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
php邮件发送的两种方式
Apr 28 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
Yii隐藏URL中index.php的方法
Jul 12 PHP
分享PHP-pcntl 实现多进程代码
Sep 30 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
Jun 09 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 26 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代码分析
2016/11/24 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
关于图片验证码设计的思考
2007/01/29 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python将图片转换为字符画的方法
2020/06/16 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
python argparser的具体使用
2019/11/10 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
物流管理专业应届生求职信
2013/11/21 职场文书
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
暑期实践思想汇报
2014/01/06 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
商场营业员岗位职责
2015/04/14 职场文书
python实现图片批量压缩
2021/04/24 Python
Python 中random 库的详细使用
2021/06/03 Python
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js
Python面试不修改数组找出重复的数字
2022/05/20 Python