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”表示字符串(默认)。 需要注意的是最后的附加规则要和前面的填充内容对应才可以。