zoukankan      html  css  js  c++  java
  • 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']){

    即可。

     


  • 相关阅读:
    结对开发地铁
    学习进度04
    构建之法阅读笔记02
    学习进度03
    构建之法阅读笔记01
    Golang开发工具LiteIDE使用方法整理
    package httputil
    package net
    package json
    package encoding
  • 原文地址:https://www.cnblogs.com/lmaster/p/7000533.html
Copyright © 2011-2022 走看看