thinkphp 自动验证的callback如何传入多个值

如题所述

第1个回答  推荐于2016-07-04
  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);自动帮把第一个参数加个数组中了。
第2个回答  推荐于2016-04-07
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;
}本回答被提问者和网友采纳
相似回答