thinkphp3.2 自动验证callback怎么使用

大神在线求帮请教下,thinkphp3.2 自动验证callback怎么使用
最新回答
网瘾少女裤裆藏雷

2025-03-02 00:33:28

  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);自动帮把第一个参数加个数组中了。