自动验证function和callback规则传入多个参数

浏览:7834 发布日期:2013/06/04 分类:技术分享 关键字: 自动验证
在手册中没有提到自动验证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!
最佳答案
评论( 相关
后面还有条评论,点击查看>>