原文:ThinkPHP 自动创建数据、自动验证、自动完成详细例子介绍(十九)

1:自动创建数据

//$name=$_POST['name'];

//$password=$_POST['password'];  ---这个注册页面传过来的POST值

      下面用了自动穿件create方法就可以不用这个,会行动绑定

$user =M('User');

$User->create();   //会将传过来的$_POST数据对应到数据库的字段

$user->add();   //就可以直接写入





2:自动验证(只需要在Model类里面定义$_validate属性)

使用步骤(注册验证User表)

一:创建User表自定义的Mode  --->Home\Lib\Model\UserModel.class.php

<?php

//注意:code username password....都是你表单里面的name值,要对应

//表单里面字段名字定义的

class UserModel extends Model{

protected $_validate=array(

array('code','require','验证码必须填写!'),

array('code','checkCode','验证码错误!',0,'callback',1),  //使用回调函数checkCode

array('username','require','用户必须填写!'),

array('username','','用户已经存在',0,'unique',1),

array('username','/^\w{6,}$/','用户名必须6个字母以上',0,'regex',1),

array('repassword','password','确认密码不正确',0,'confirm'), 

);





protected function
checkCode($code){

if(md5($code)!=$_SESSION['code']){

return false;

}else{

return true;

}

}

}

?>





//控制请值对应的注册方法

<?php

class RegisterAction extends Action{

public function doReg(){



$user=D('User');  //大D方法是会先去找你自定义的Mode,(使用上面创建的UserModel.class.php类)

                //如果有有自定义的用自定义的,否则用原始的  D等同M   M!=D

 

if(!$user->create()){//会自动去验证  返回一个布尔类型,成功则自动创建数据

$this->error($user->getError());//获取具体错误信息

}

$lastId=$user->add();

if($lastId){

$this->redirect('Index/index');

}else{

$this->error('用户注册失败');

}





}

}

?>



3:自动完成(做留言的例子)

步骤:

一:创建Message表自定义的Mode  --->Home\Lib\Model\MessageModel.class.php

<?php

class MessageModel extends RelationModel{

protected $_auto=array(

array('time','time',1,'function'),

array('uid','getId',1,'callback')



);

protected function
getId(){

return $_SESSION['id'];

}

}

?>

        二:控制器中

<?php

class MessageAction extends Action{

public function doLiuyan(){

$message=D('Message');

//$message->time=time();

//$message->uid=$_SESSION['id'];   这2个值将在自定义MessageModel中自动填充完成



$message->add(); //返回值是新增的id号

}

}

?>

最新文章

  1. BZOJ 1109: [POI2007]堆积木Klo
  2. 关于MySQL的SLEEP(N)函数
  3. spring mvc文件上传和下载
  4. SoapUI接口测试&#183;第一个HTTP Request接口请求和断言
  5. java几道简单的面试题目
  6. Collecting Bugs(POJ 2096)
  7. 用 CSS 实现字符串截断
  8. Python面向对象编程——引言
  9. 2dx解析cocosbuilder中使用layer时的缺陷
  10. Android基础之响应Menu键弹出菜单Demo
  11. wormhole提升hivereader读取速度方案
  12. Socket规划(1)
  13. SIP DB33标准笔记 监控图像获取
  14. 【知识整理】这可能是最好的RxJava 2.x 入门教程(四)
  15. 音频传输之Jitter Buffer设计与实现
  16. Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (上)
  17. IIS+nginx反向代理 负载均衡
  18. docker配置nginx做反向代理管理tomcat应用
  19. nginx配置https转发http
  20. 《梦断代码》Scott Rosenberg著(二)

热门文章

  1. java.lang.NoClassDefFoundError: ognl/PropertyAccessor解决的方法
  2. Swift - 使用闭包筛选过滤数据元素
  3. Android 代码混淆
  4. Java基础06 组合
  5. 微信jsSDK开发
  6. 用Eclipse做Android开发时出现java.lang.NoClassDefFoundError问题
  7. android怎样实现自动点击功能
  8. MSSQL - 存储过程Return返回值
  9. 6.MIL采集和实时显示
  10. 基于visual Studio2013解决面试题之0410计算二进制中1的个数