Thinkphp中的三大自动

12 篇文章 0 订阅
一、自动验证

  
 array('验证字段','验证规则','错误提示','验证条件','附加规则','验证时间') 
  
  
 //验证字段:需要验证表单字段名称
     //验证规则:必须要结合附加规则一起使用
     //错误提示:如果出现错误,抛出一个什么样的错误提示告知用户
     //验证条件:0、1、2
     //附加规则:1、regex使用正则验证 2、function使用函数验证 3、callback回调 4、confirm验证表单当中两个字段是否相同 5、验证是否等于某个值 6、in是否在某一个范围内 7、验证是否唯一
     //TP封装:require 字段必须验证;eamil 验证邮箱;url 验证url地址;currency 货币;number 数字;
     //验证时间:指数据库操作时间的验证时机,新增数据时验证Model::MODEL_INSERT;编辑的时候验证Model::MODEL_UPDATE;全部情况下验证Model::MODEL_BOTH;

      aoli/Home/Tpl/default/User/reg.html

   <form action="__URL__/regadd" method="post">
       用户名:<input type="text" name="username" /><br />
       密码:<input type="password" name="password" /><br />
       重复密码:<input type="password" name="repassword" /><br />
       注册时间:<input type="text" name="createtime" /><br />
       注册IP:<input type="text" name="createip" /><br />
       <input type="submit" value="注册" />
   </form>
  

      aoli/Home/Lib/Model/UserModel.class.php
  
 
 <?php
   class UserModel extends Model{//对应数据库中的表user
          protected $_validate=array(
                 array('username','require','用户名必填'),
                 array('username','checklen','用户名长度过长或过短',0,'callback'),
                 array('password','require','密码必填'),
                 array('repassword','require','重复密码必填'),
                 array('password','repassword','两次密码不一致',0,'confirm'),
                 array('createtime','number','您输入的不是数字'),
                 array('createip','email','邮箱格式不正确'),
          );   
          function checklen($data){
                 if(strlen($data)>15 || strlen($data)<5){
                        return false;
                 }else{
                        return true;
                 }
          }
               
   }
   ?>

   aoli/Home/Lib/Action/UserAction.class.php

             <?php
             class UserAction extends Action {       

            function reg(){
                   $this->display();        
            }
          
            function regadd(){
                   $user=D('user');
                   if($user->create()){
                          if($user->add()){
                                 $this->success('注册成功');        
                          }else{
                                 $this->error('注册失败');        
                          }
                   }else{
                          $this->error($user->getError());        
                   }          
            }          
   }
   ?>
  
二、自动完成(自动填充)  

   
 //自动完成也是ThinkPHP当中的一个成员方法,在create的时候,自动执行
       //array('填充字段','填充内容','填充条件','附加规则');
       protected $_auto = array ( 
          //array( 'status','1'),     //   新增的时候把 status 字段设置为 1
          array('password','md5',1,'function') ,   //   对 password 字段在新增的时候使 md5 函数处理
          array('createtime','time',3,'function' ),   //   对 create_time 字段在更新的时候写入当前时间戳
       ); 

二、自动映射(字段映射)

   
 //自动映射:将数据库的字段映射成别名,在表单中就可以使用别名了。
       protected $_map = array(    
              'name' => 'username',
              'pass' => 'password',

    ); 



一:自动验证
   自动验证的定义是这样的:array(field,rule,message,condition,type,when,params)
    field:代表是数据库的字段名;
   rule:代表是规则;
            它的值要看type的类型而定;
            如果是condition 是function(callback),rule是一个函数名
                     condition 是in,rule是一个数组
   message:代表是消息提示;
   condition:代表是验证条件
                      它的值:
                            self::MUST_VALIDATE 表示必须验证
                            self::VALUE_VAILIDATE   表示不为空的时候验证
                            self::EXISTS_VAILIDATE   表示表单存在的字段验证(默认)
   type:代表验证类型
                      它的值:
                            function(callback) 表示验证的是调用一个Model中的函数
                            confirm 表示验证两个字段是否相同
                            in 是否在某个数组范围之内
                            equal 验证是否等于某个值
                            unique 验证某个值是否唯一
                            regex 使用正则表达式(默认)
                           
   when:代表是是否需要执行验证
                  它的值:
                        self::INSERT_STATUS     add操作的时候验证
                        self::UPDATE_STATUS update操作的时候验证
                        self::ALL_STATUS       (不用说了吧)
   params:参数(具体什么我现在还不太清楚)


看看例子:
简单一点有一张表,id,name(varchar),cDate(Datetime)
要求name不能为空且不能重复(id为自动类型)
protected $_validate = array(
       array("name","require","名称必须"),
       array("name","checkData","该名称已经存在",self::MUST_VALIDATE,"callback",self::ALL_STATUS),
);

protected function checkData(){
   if(isset($_POST["id"])){                    /****   update时验证 ****/
         $condition["id"] = array("neq",$_POST["id"]);
         $condition["name"] = $_POST["name"];
         $list = $this -> where($condition) -> find();
         if(!$list){
            return true;
         }else{
            return false;
         }
       }else{                                  /****   add时验证 ****/
         $condition["name"] = $_POST["name"];
         $list = $this -> where($condition) -> find();
         if(!$list){
            return true;
         }else{
            return false;
         }
       }
}

第一个表示名称必须的,无论在add或update的时候
第二个表示在无论在add或update的时候不能重复,使用一个回调函数checkData,

说明:
不要想当然的type =unique,在add的时候没问题,但在update的时候是不能用的,无效的(流年说的)

其他的我没仔细琢磨,自己试试看吧

二:自动填充
      自动填充与手册也是不相符的,它的定义是array('field','填充内容','填充条件','附加规则',[额外参数])
      field:(不用说了)
      填充内容:
                  根据附加规则值不同设定不同
                  function(callback)   =》 函数名
      填充条件:
               它的值:
                      self::MODEL_INSERT    add操作的时候填充
                      self::MODEL_UPDATE     udate操作的时候填充
                      self::MODEL_BOTH        (不用说了)
      附加规则
               它的值:
                  function(callback)   使用函数,
                  field                       用其它字段的值进行填充
                  string                   默认作为字符串填充
      额外参数


按照上边的表对cDate字段在add,update的时候进行自动填充

protected   $_auto = array(
       array("cDate","MYDate",self::MODEL_BOTH,"callback"),
);

protected function MYDate(){
       return date("Y-m-d H:i:s");
}


$auto属性由以下几部分组成: 

array(填充字段,填充内容,填充条件,附加规则) 

1.填充字段:这个值可以是数据库字段或者表单字段。 

2.填充内容:这个值可以是字符串,函数名或者方法名和其他字段名称,这个要跟后边的附加规则对应。 

3.填充条件:这个值有3种状态,1为新增数据时才处理(默认),2为更新数据时处理,3为以上两种情况都处理。 

4.附加规则:这个值可以是“function”也就是函数,“callback”这个表示回调方法,“field”表示其他字段,“string”表示字符串(默认)。 需要注意的是最后的附加规则要和前面的填充内容对应才可以。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值