激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - PHP教程 - thinkPHP框架自動(dòng)填充原理與用法分析

thinkPHP框架自動(dòng)填充原理與用法分析

2019-10-13 14:40雪山飛豬 PHP教程

這篇文章主要介紹了thinkPHP框架自動(dòng)填充,結(jié)合實(shí)例形式較為詳細(xì)的分析了thinkPHP框架自動(dòng)填充的原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例分析了thinkPHP框架自動(dòng)填充原理與用法。分享給大家供大家參考,具體如下:

thinkphp有一個(gè)自動(dòng)填充字段的方法

填充規(guī)則如下

array(
   array(完成字段1,完成規(guī)則,[完成條件,附加規(guī)則]),
   array(完成字段2,完成規(guī)則,[完成條件,附加規(guī)則]),
   ......
);

注:研究源碼后發(fā)現(xiàn)其實(shí)還有第4個(gè)參數(shù),是給函數(shù)或者回調(diào)方法傳參數(shù)用的,參數(shù)1默認(rèn)為該字段值,如:

array('mobile','trim',3,'function',參數(shù)2,參數(shù)3'),

驗(yàn)證支付動(dòng)態(tài)和靜態(tài)

靜態(tài)驗(yàn)證

在模型類(lèi)里面預(yù)先定義好該模型的自動(dòng)驗(yàn)證規(guī)則,在使用create方法后會(huì)自動(dòng)去驗(yàn)證。

以下是官方的例子

1.首先在模型中定義好驗(yàn)證的規(guī)則

namespace Home\Model;
use Think\Model;
class UserModel extends Model{
   protected $_auto = array (
     array('status','1'), // 新增的時(shí)候把status字段設(shè)置為1
     array('password','md5',3,'function') , // 對(duì)password字段在新增和編輯的時(shí)候使md5函數(shù)處理
     array('name','getName',3,'callback'), // 對(duì)name字段在新增和編輯的時(shí)候回調(diào)getName方法
     array('update_time','time',2,'function'), // 對(duì)update_time字段在更新的時(shí)候?qū)懭氘?dāng)前時(shí)間戳
   );
}

2.在調(diào)用的時(shí)候用create方法會(huì)自動(dòng)進(jìn)行填充

$User = D("User"); // 實(shí)例化User對(duì)象
if (!$User->create()){ // 創(chuàng)建數(shù)據(jù)對(duì)象
   // 如果創(chuàng)建失敗 表示驗(yàn)證沒(méi)有通過(guò) 輸出錯(cuò)誤提示信息
   exit($User->getError());
}else{
   // 驗(yàn)證通過(guò) 寫(xiě)入新增數(shù)據(jù)
   $User->add();
}

動(dòng)態(tài)驗(yàn)證

以下是官方的例子

$rules = array (
  array('status','1'), // 新增的時(shí)候把status字段設(shè)置為1
  array('password','md5',3,'function') , // 對(duì)password字段在新增和編輯的時(shí)候使md5函數(shù)處理
  array('update_time','time',2,'function'), // 對(duì)update_time字段在更新的時(shí)候?qū)懭氘?dāng)前時(shí)間戳
);
$User = M('User');
$User->auto($rules)->create();
$User->add();

下面是核心的代碼分析:

create方法調(diào)用后會(huì)調(diào)用autoOperation方法,方法如下

/**
 * 自動(dòng)表單處理
 * @access public
 * @param array $data 創(chuàng)建數(shù)據(jù)
 * @param string $type 創(chuàng)建類(lèi)型
 * @return mixed
 */
private function autoOperation(&$data,$type) {
  if(!empty($this->options['auto'])) {
    $_auto  =  $this->options['auto'];
    unset($this->options['auto']);
  }elseif(!empty($this->_auto)){
    $_auto  =  $this->_auto;
  }
  // 自動(dòng)填充
  if(isset($_auto)) {
    foreach ($_auto as $auto){
      // 填充因子定義格式
      // array('field','填充內(nèi)容','填充條件','附加規(guī)則',[額外參數(shù)])
      if(empty($auto[2])) $auto[2] = self::MODEL_INSERT; // 默認(rèn)為新增的時(shí)候自動(dòng)填充
      //這里的判斷是關(guān)鍵,$type為當(dāng)前的操作狀態(tài),值為1表示是插入,值為2表示是更新
      //如果當(dāng)前的$type狀態(tài)值等于設(shè)置的值$auto[2]或者$auto[2]的值為3,代表需要填充
      if( $type == $auto[2] || $auto[2] == self::MODEL_BOTH) {
        if(empty($auto[3])) $auto[3] = 'string';
        switch(trim($auto[3])) {
          case 'function':  // 使用函數(shù)進(jìn)行填充 字段的值作為參數(shù)
          case 'callback': // 使用回調(diào)方法
            $args = isset($auto[4])?(array)$auto[4]:array();
            if(isset($data[$auto[0]])) {
              array_unshift($args,$data[$auto[0]]);
            }
            if('function'==$auto[3]) {
              $data[$auto[0]] = call_user_func_array($auto[1], $args);
            }else{
              $data[$auto[0]] = call_user_func_array(array(&$this,$auto[1]), $args);
            }
            break;
          case 'field':  // 用其它字段的值進(jìn)行填充
            $data[$auto[0]] = $data[$auto[1]];
            break;
          case 'ignore': // 為空忽略
            if($auto[1]===$data[$auto[0]])
              unset($data[$auto[0]]);
            break;
          case 'string':
          default: // 默認(rèn)作為字符串填充
            $data[$auto[0]] = $auto[1];
        }
        if(isset($data[$auto[0]]) && false === $data[$auto[0]] )  unset($data[$auto[0]]);
      }
    }
  }
  return $data;
}

希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精品日日鲁夜夜添 | 日韩毛片在线看 | 成人性生活视频 | 99视频有精品视频高清 | a级高清免费毛片av在线 | 小情侣嗯啊哦视频www | 国产精品免费麻豆入口 | 亚洲免费看片网站 | 嫩草91在线 | 欧美日韩国产综合网 | 男女隐私免费视频 | 一区二区三区日韩在线 | 大逼逼影院 | 永久免费av片在线观看全网站 | 久久精品伊人网 | 国产一级淫片免费看 | 欧美性生交大片 | 国产高潮好爽受不了了夜色 | 国产成年人网站 | 亚洲一区二区三区在线免费观看 | 久草资源在线观看 | 欧美a视频| 久久久人 | 999久久久久久 | 中文字幕一区在线观看视频 | av免费不卡国产观看 | 色综合激情 | 精品在线免费播放 | www.17c亚洲蜜桃 | 久久精品国产久精国产 | 亚洲一区在线视频观看 | 成人毛片视频在线播放 | 老a影视网站在线观看免费 国产精品久久久久久久久久尿 | 日韩黄色一区 | 成人福利在线 | 特片网久久| 91精品国产福利尤物免费 | 姑娘第四集免费看视频 | 日产精品久久久久久久 | 懂色粉嫩av久婷啪 | 国产二区三区视频 |