自动完成即对用户提交的数据进行处理,比如:加前缀后缀、去除HTML标记,编号…等等。使用create()方法创建数据是会自动完成的。
完成规则
自动完成一般通过默认字段写入、安全字段过滤以及业务逻辑的自动处理。有两种方式实现自动完成规则:
1、静态方式:在模型类里通过$_auto属性定义处理规则;
2、动态方式:使用模型类的auto方法动态创建自动处理规则。
//完成规则
array(
array(完成字段1,完成规则,[完成条件,附加规则]),
array(完成字段1,完成规则,[完成条件,附加规则]),
...
);
完成字段:必填,需要的字段名;
完成规则:必填,配合附加规则完成;
完成条件:可选,具体如下:
1、self::MODEL_INSERT或1,新增数据的时候处理(默认);
2、self::MODEL_UPDATE或2,更新数据的时候处理;
3、self::MODEL_BOTH或3,所有情况均处理。
附加规则:可选,配合完成规则使用,包括以下规则:
规则 | 说明 |
---|---|
function | 函数完成,定义的验证规则是一个函数名 |
callback | 方法完成,定义的验证规则是当前模型类的一个方法 |
field | 用其他字段填充,表示填充的内容是一个其他字段的值 |
string | 字符串(默认) |
ignore | 为空则忽略 |
为了方便测试,直接通过模拟提交post:
//控制器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');