ThinkPHP表单数据智能写入create方法实例分析
本文实例讲述了ThinkPHP表单数据智能写入create方法。分享给大家供大家参考。具体如下:
创建数据对象create()
除了手动构造入库的数据集之外,ThinkPHP还提供了自动创建数据对象的create()方法。create()方法将自动收集提交的表单数据并创建数据对象而无需人工干预,这在表单数据字段非常多的情况下更具优势。
将前文写入表单数据的例子用create()来实现:
publicfunctioninsert2(){ 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().'[<ahref="javascript:history.back()">返回</a>]'); } }
create()创建数据对象后,将自动收集提交过来的表单数据。而表单数据可能需要经过一定加工(例如将密码加密)才能写入数据表,所以可以对数据对象的成员属性值根据进行修改或添加去除等。
提示:create()创建的数据对象存放于内存,在执行入库动作(add()或save())之前,都可以进行修改。
在上面的例子里,create()方法的行为和date()方法是一致。但date()方法只是简单的创建数据对象,但create()方法还具备:
①令牌验证
②数据自动验证
③字段映射支持
④字段类型检查
⑤数据自动完成
等各种高级的数据功能,要完成这些高级数据模型功能,需要使用D方法实例化数据模型。ThinkPHP提供了各种验证与填充规则供调用,具体可参见《ThinkPHP自动验证》与《ThinkPHP自动填充》相关文章。
自动验证与自动填充
在将表单写入数据表之前,常常会有一些对数据的检测(提交的用户名是否符合要求)与处理(如例子中的密码加密以及取得当前时间戳)。create()方法就支持数据的自动验证与自动完成。
在LibModel目录下创建UserModel.class.php文件(User为创建的模型对象,也对应前缀_user表),加入自动验证和自动填充规则:
classUserModelextendsModel{ //自动验证设置 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操作更改为:
publicfunctioninsert2(){ 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().'[<ahref="javascript:history.back()">返回</a>]'); } }
如果提交的数据不符合验证要求(如用户名存在),则create()创建数据对象失败(返回FALSE),$Dao->getError()会打印出自动验证设置规则里面设置的提示信息:用户名已经存在!
如果验证规则通过后,系统会进行自动填充设置,将表单密码进行MD5加密以及取得当前的时间戳填充入create()的数据对象。
所以D方法配合create()是非常智能而强大的,恰当运用可以达到事半功倍快速开发的目的。
提示:
①D方法配合create()由于其功能强大,也就损失了一定的效率,在业务逻辑不复杂的情况下推荐M方法+data()模式
②create()默认接受POST数据,若要接受其他类型数据,只需在参数内指定即可,如接受GET数据:create($_GET)
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》及《ThinkPHP常用方法总结》
希望本文所述对大家基于ThinkPHP框架的php程序设计有所帮助。