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
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');