Undefined index: validate(thinkphp)

今天在用thinkphp3.23时发现错误

NOTIC: [8] Undefined index: validate  此处是thinkphp核心目录ThinkModel.class.php 第 1185 行.

查看底层代码

    /**
     * 自动表单验证
     * @access protected
     * @param array $data 创建数据
     * @param string $type 创建类型
     * @return boolean
     */
    protected function autoValidation($data,$type) {
        if(false === $this->options['validate'] ){ //问题位置
            // 关闭自动验证
            return true;
        }

将其改为

if(isset($this->options['validate']) && false === $this->options['validate'] ){

后未发现报错

最后查询各种资料和翻看tkinkphp的Model.class.php源码

原因如下:

// 链操作方法列表

protected $methods  =   array('strict','order','alias','having','group','lock','distinct','auto','filter','validate','result','token','index','force');

public function __call($method,$args) {
        if(in_array(strtolower($method),$this->methods,true)) {
            // 连贯操作的实现
            $this->options[strtolower($method)] =   $args[0];
            return $this;
        }elseif(in_array(strtolower($method),array('count','sum','min','max','avg'),true)){
            // 统计查询的实现
            $field =  isset($args[0])?$args[0]:'*';
            return $this->getField(strtoupper($method).'('.$field.') AS tp_'.$method);
        }elseif(strtolower(substr($method,0,5))=='getby') {
            // 根据某个字段获取记录
            $field   =   parse_name(substr($method,5));
            $where[$field] =  $args[0];
            return $this->where($where)->find();
        }elseif(strtolower(substr($method,0,10))=='getfieldby') {
            // 根据某个字段获取记录的某个值
            $name   =   parse_name(substr($method,10));
            $where[$name] =$args[0];
            return $this->where($where)->getField($args[1]);
        }elseif(isset($this->_scope[$method])){// 命名范围的单独调用支持
            return $this->scope($method,$args[0]);
        }else{
            E(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_'));
            return;
        }
    }

当我们如下:

$this->shopModel =D('shop');
$data = $this->shopModel->validate(222)->create();
if(in_array(strtolower($method),$this->methods,true)) {
            // 连贯操作的实现
            $this->options[strtolower($method)] =   $args[0];
            return $this;
触发这段
$this->options['validate']=222;
但是当我用模型的 protected $_validate时,而没有用动态验证时
$this->options['validate']是不存在的
if(false === $this->options['validate'] )就会出现
上面的报错。

同理在自动完成时也
NOTIC: [8] Undefined index: auto
是一样的原因
if(isset($this->options['auto']) && false === $this->options['auto']){

即可。

 


原文地址:https://www.cnblogs.com/lmaster/p/7000533.html