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 相关文章推荐
优化NFR之一 --MSSQL Hello Buffer Overflow
Oct 09 PHP
打造计数器DIY三步曲(上)
Oct 09 PHP
生成静态页面的PHP类
Nov 25 PHP
表单复选框向PHP传输数据的代码
Nov 13 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
Aug 17 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
PHP分页类集锦
Nov 18 PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 PHP
php 运算符与表达式详细介绍
Nov 30 PHP
yii2实现分页,带搜索的分页功能示例
Jan 07 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
一次因composer错误使用引发的问题与解决
Mar 06 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获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
Laravel下生成验证码的类
2017/11/15 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
jQuery 注意事项 与原因分析
2009/04/24 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
Python fileinput模块使用介绍
2014/11/30 Python
Python中DJANGO简单测试实例
2015/05/11 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
一封普通求职者的求职信
2013/11/20 职场文书
写给女朋友的道歉信
2014/01/12 职场文书
大学军训感想
2014/02/12 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
老干部工作汇报材料
2014/10/28 职场文书
2014年工程师工作总结
2014/11/25 职场文书
经典爱情感言
2015/08/03 职场文书
领导干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript
windows系统安装配置nginx环境
2022/06/28 Servers