ThinkPHP中自动填充日期时间

2019-08-13 10:25:44 浏览数 (1)

TP学到CURD部分,在模型中使用自动填充功能碰到点问题

一开始不知道还有第5个格式参数,手册里都没有,心塞(>﹏<。)~

代码语言:javascript复制
class FormModel extends Model{ 
//定义自动验证 protected $_validate = array(
 array('title','require','标题不能为空'), 
 ); 
 
//定义自动完成 protected $_auto = array( 
array('create_time','date',1,'function',array('Y-m-d H:i:s')), 
); 
}

还有不用第5个参数的

代码语言:javascript复制
class FormModel extends Model{ 
//定义自动验证 protected $_validate = array( 
array('title','require','标题不能为空'), ); 

//定义自动完成 protected $_auto = array( 
array('create_time','getTime',1,'callback'), ); 

protected function getTime(){ $time = time(); 
$datetime = date("Y-m-d H:i:s",$time); return $datetime; 
 } 
}

要注意的一点是

如果是用自己的函数那就要用callback,第二个参数默认当前模块能调用的方法;用function的话第二个参数为函数名,而这个函数可以是PHP自带的,也可以是你自己写的

  • 要使用(Y-m-d H:i:s)的形式,数据库中的create_time字段数据类型要是datetime
代码语言:java复制
protected $_auto = array(
      array('time_at','time','1','function'),
    );
  • 如果使用以上的填充方法,数据库中的create_time字段数据类型要是int

以下附录一下自动填充的规则: 要使用自动填充功能,只需要在对应的 Model类 里面定义 $_auto 属性(由多个验证因子组成的数组)。$_auto 属性是由多个填充因子组成的数组

代码语言:javascript复制
protected $_auto = array(
    array(填充字段,填充内容[,填充条件][,附加规则])
};

自动完成是ThinkPHP提供用来完成数据自动处理和过滤的方法,使用create方法创建数据对象的时候会自动完成数据处理。

因此,在ThinkPHP使用create方法来创建数据对象是更加安全的方式,而不是直接通过add或者save方法实现数据写入。

验证实例


代码语言:javascript复制
//控制器create()方法自动调用验证
$user = D('User');
$data['user'] = '蜡笔小新';
if($user->create($data)){
    $user->add();
}

//string,自动设置count字段为
array('count','1'),

//function,给密码加密,加密类型为sha1,sha1函数为php内置
//该function必须写在Common下的Common文件夹下的function.php
//如果是php内置函数则可直接调用,不需要另写方法,比如sha1或md5加密则可直接调用。
array('user','sha1',3,'function'),

//把email字段的值填充到user字段中去,因为很多时候,用户注册时没有填写昵称或其他,
//所以我们可以把用户填写的email填充到user去当做昵称
array('user','email',3,'field'),


//callback,给用户名加前缀
array('user','updateUser',3,'callback','_'),
//回调函数
protected function updateUser($str,$prefix){
 return $prefix.$str;
}

//igonre,用于修改时密码留空时,忽略修改
array('pass','',2,'ignore');

0 人点赞