標籤: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)