Undefined index: validate(thinkphp)

來源:互聯網
上載者:User

標籤:distinct   alias   undefined   max   關閉自動   access   lte   where   表單驗證   

今天在用thinkphp3.23時發現錯誤

NOTIC: [8] Undefined index: validate  此處是thinkphp核心目錄\Think\Model.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‘]){

即可。

 


 

Undefined index: validate(thinkphp)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.