在将表单写入数据表之前,常常会有一些对数据的检测(提交的用户名是否符合要求)与处理(如例子中的密码加密以及取得当前时间戳)。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() 是非常智能而强大的,恰当运用可以达到事半功倍快速开发的目的。