thinkphp 自动验证 callback function 传参变量
array('invited_id','require','必须被邀请!'),array('invite_code','require','邀请码必须!'),array(...
array('invited_id','require','必须被邀请!'),
array('invite_code','require','邀请码必须!'),
array('invited_id','number','邀请人ID必须为数字!'),
array('invited_id','check_invited','邀请人不存在!',0,'callback',3,array() ), //我要将变量invite_code中的值传进去,array()怎么写?
protected function check_invited( $id,$invite_code ){
$where=array(
'id'=>$id,
'invite_code'=>$invite_code
);
//p($where);die;
if(M('User')->field(array('id'))->where($where)->find()){
return true;
}else {
return false;
}
}
//我要将变量invite_code中的值传进去,array()怎么写?
第4条规则应该怎么写? 展开
array('invite_code','require','邀请码必须!'),
array('invited_id','number','邀请人ID必须为数字!'),
array('invited_id','check_invited','邀请人不存在!',0,'callback',3,array() ), //我要将变量invite_code中的值传进去,array()怎么写?
protected function check_invited( $id,$invite_code ){
$where=array(
'id'=>$id,
'invite_code'=>$invite_code
);
//p($where);die;
if(M('User')->field(array('id'))->where($where)->find()){
return true;
}else {
return false;
}
}
//我要将变量invite_code中的值传进去,array()怎么写?
第4条规则应该怎么写? 展开
2个回答
2014-12-10
展开全部
在手册中没有提到自动验证function和callback规则传入多个参数,而且貌似规则数组就六个元素。
手册-自动验证:http://doc.thinkphp.cn/manual/auto_validate.html
但是,
我看到框架源代码中是这样写的:
http://www.thinkphp.cn/api/source-class-Model.html#975
protected function _validationFieldItem($data,$val) {
switch(strtolower(trim($val[4]))) {
case 'function':// 使用函数进行验证
case 'callback':// 调用方法进行验证
$args = isset($val[6])?(array)$val[6]:array();
if(is_string($val[0]) && strpos($val[0], ','))
$val[0] = explode(',', $val[0]);
if(is_array($val[0])){
// 支持多个字段验证
foreach($val[0] as $field)
$_data[$field] = $data[$field];
array_unshift($args, $_data);
}else{
array_unshift($args, $data[$val[0]]);
}
if('function'==$val[4]) {
return call_user_func_array($val[1], $args);
}else{
return call_user_func_array(array(&$this, $val[1]), $args);
}
其中$val[6]应该就是规则的第七个参数,是array类型。
那么我这样写规则:
// 自动验证设置
protected $_validate = array(
array('title', 'checkTitle', '有个参数错误啦!', 1, 'callback', 3, array('654321')),
);
public function checkTitle($arg1, $arg2) {
if('123456' === $arg2) {
return TRUE;
} else {
return FALSE;
}
}
也就是说,是可以传入多个参数的,就是在规则数组中加入第七个元素,类型是array型。里面就是function或者callback的参数列表,但是不能包含第一个参数,因为第一个参数默认是你要验证的字段,框架中用array_unshift($args, $_data);自动帮你把第一个参数加个数组中了。
看thinkphp框架源代码,就能解决很多疑问,哈哈,感谢thinkphp!
展开全部
方法一(不使用回调传参用I函数接收参数):
protected $_validate = array(
array('invited_id','check_invited','邀请人不存在!',0,'callback',3 ),
);
protected function check_invited( $invited_id ) {
$invite_code = I('invite_code');
//....
}
方法二(重写模型_initialize方法):
public function _initialize() {
$this->_validate[3][6]['invite_code'] = I('invite_code'); // 动态加入回调参数
}
protected function check_invited( $invited_id, $invite_code ) {
echo $invite_code;
}
推荐使用方法一,方法二有些南辕北辙只做为参考。
protected $_validate = array(
array('invited_id','check_invited','邀请人不存在!',0,'callback',3 ),
);
protected function check_invited( $invited_id ) {
$invite_code = I('invite_code');
//....
}
方法二(重写模型_initialize方法):
public function _initialize() {
$this->_validate[3][6]['invite_code'] = I('invite_code'); // 动态加入回调参数
}
protected function check_invited( $invited_id, $invite_code ) {
echo $invite_code;
}
推荐使用方法一,方法二有些南辕北辙只做为参考。
追问
谢谢
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询