• 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']){

    即可。

     


  • 相关阅读:
    win 下 docker 环境配置
    【译】PHP 内核 — 字符串管理
    Elasticsearch和Lucene的关系
    如何写出高性的SQL语句?
    Java 8
    Cause: java.sql.SQLSyntaxErrorException: ORA-01719: OR 或 IN 操作数中不允许外部联接运算符 (+)
    sql 使用 in 后数据量太大报错
    java8-求最小值(8中方法)
    Oracle 强制索引
    为什么新安装eclipse idea等环境,初次运行java程序,会弹出windows防火墙信息
  • 原文地址:https://www.cnblogs.com/lmaster/p/7000533.html
Copyright © 2020-2023  润新知