除了手动构造入库的数据集以外,ThinkPHP 还提供了自动建立数据对象的 create() 方法。create() 方法将自动收集提交的表单数据并建立数据对象而无需人工干预,这在表单数据字段很是多的状况下更具优点。javascript
将前文写入表单数据的例子用 create() 来实现:php
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() 建立数据对象后,将自动收集提交过来的表单数据。而表单数据可能须要通过必定加工(例如将密码加密)才能写入数据表,因此能够对数据对象的成员属性值根据进行修改或添加去除等。html
提示:create() 建立的数据对象存放于内存,在执行入库动做(add() 或 save())以前,均可以进行修改。java
在上面的例子里,create()方法 的行为和 date()方法 是一致。但 date() 方法只是简单的建立数据对象,但 create() 方法还具有:thinkphp
等各类高级的数据功能,要完成这些高级数据模型功能,须要使用 D方法 实例化数据模型。ThinkPHP 提供了各类验证与填充规则供调用,具体可参见《ThinkPHP 自动验证》与《ThinkPHP 自动填充》。ide
在将表单写入数据表以前,经常会有一些对数据的检测(提交的用户名是否符合要求)与处理(如例子中的密码加密以及取得当前时间戳)。create() 方法就支持数据的自动验证与自动完成。ui
在 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 操做更改成:spa
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() 会打印出自动验证设置规则里面设置的提示信息:用户名已经存在!htm
若是验证规则经过后,系统会进行自动填充设置,将表单密码进行 MD5 加密以及取得当前的时间戳填充入 create() 的数据对象。
因此 D方法 配合 create() 是很是智能而强大的,恰当运用能够达到事半功倍快速开发的目的。