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

 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励20(财富值+成长值)
低调侃大山
推荐于2016-07-04 · 家事,国事,天下事,关注所有事。
低调侃大山
采纳数:67731 获赞数:374602

向TA提问 私信TA
展开全部
  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);自动帮把第一个参数加个数组中了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于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;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式