首頁 後端開發 php教程 關於thinkPHP框架自動填充的原理及分析

關於thinkPHP框架自動填充的原理及分析

Jun 19, 2018 am 10:36 AM
thinkphp框架 自動填充

這篇文章主要介紹了thinkPHP框架自動填充,結合實例形式較為詳細的分析了thinkPHP框架自動填充的原理、使用方法及相關操作注意事項,需要的朋友可以參考下

本文實例分析了thinkPHP框架自動填入原理與用法。分享給大家供大家參考,具體如下:

thinkphp有一個自動填入欄位的方法

填充規則如下

array(
   array(完成字段1,完成规则,[完成条件,附加规则]),
   array(完成字段2,完成规则,[完成条件,附加规则]),
   ......
);
登入後複製

註:研究原始碼後發現其實還有第4個參數,是給函數或回呼方法傳參數用的,參數1預設為此欄位值,如:

array('mobile','trim',3,'function',参数2,参数3'),
登入後複製

#驗證支付動態和靜態

靜態驗證

在模型類別裡面預先定義好該模型的自動驗證規則,在使用create方法後會自動去驗證。

以下是官方的例子

1.首先在模型中定義好驗證的規則

namespace Home\Model;
use Think\Model;
class UserModel extends Model{
   protected $_auto = array (
     array('status','1'), // 新增的时候把status字段设置为1
     array('password','md5',3,'function') , // 对password字段在新增和编辑的时候使md5函数处理
     array('name','getName',3,'callback'), // 对name字段在新增和编辑的时候回调getName方法
     array('update_time','time',2,'function'), // 对update_time字段在更新的时候写入当前时间戳
   );
}
登入後複製

2.在呼叫的時候用create方法會自動進行填入

$User = D("User"); // 实例化User对象
if (!$User->create()){ // 创建数据对象
   // 如果创建失败 表示验证没有通过 输出错误提示信息
   exit($User->getError());
}else{
   // 验证通过 写入新增数据
   $User->add();
}
登入後複製

動態驗證

以下是官方的例子

$rules = array (
  array('status','1'), // 新增的时候把status字段设置为1
  array('password','md5',3,'function') , // 对password字段在新增和编辑的时候使md5函数处理
  array('update_time','time',2,'function'), // 对update_time字段在更新的时候写入当前时间戳
);
$User = M('User');
$User->auto($rules)->create();
$User->add();
登入後複製

下面是核心的程式碼分析:

create方法呼叫後會呼叫autoOperation方法,方法如下

/**
 * 自动表单处理
 * @access public
 * @param array $data 创建数据
 * @param string $type 创建类型
 * @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;
  }
  // 自动填充
  if(isset($_auto)) {
    foreach ($_auto as $auto){
      // 填充因子定义格式
      // array('field','填充内容','填充条件','附加规则',[额外参数])
      if(empty($auto[2])) $auto[2] = self::MODEL_INSERT; // 默认为新增的时候自动填充
      //这里的判断是关键,$type为当前的操作状态,值为1表示是插入,值为2表示是更新
      //如果当前的$type状态值等于设置的值$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':  // 使用函数进行填充 字段的值作为参数
          case 'callback': // 使用回调方法
            $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':  // 用其它字段的值进行填充
            $data[$auto[0]] = $data[$auto[1]];
            break;
          case 'ignore': // 为空忽略
            if($auto[1]===$data[$auto[0]])
              unset($data[$auto[0]]);
            break;
          case 'string':
          default: // 默认作为字符串填充
            $data[$auto[0]] = $auto[1];
        }
        if(isset($data[$auto[0]]) && false === $data[$auto[0]] )  unset($data[$auto[0]]);
      }
    }
  }
  return $data;
}
登入後複製

#以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

關於smarty循環巢狀的用法

關於PHP編譯configure時常見的錯誤

關於PHP中的靜態變數及static靜態變數的使用解析

以上是關於thinkPHP框架自動填充的原理及分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1268
29
C# 教程
1248
24
如何處理PHP表單中的自動填充和自動完成 如何處理PHP表單中的自動填充和自動完成 Aug 11, 2023 pm 06:39 PM

如何處理PHP表單中的自動填充和自動完成隨著互聯網的發展,人們越來越依賴自動填充和自動完成功能來簡化他們在網站上的操作。而在PHP表單中實現這些功能並不複雜,本文將簡要介紹如何使用PHP來處理表單的自動填充和自動完成。在開始之前,我們需要先明確什麼是自動填入和自動完成。自動填入是指根據使用者先前的輸入或歷史記錄,自動為使用者填寫表單中的欄位。例如,在使用者輸入郵件

使用Java實現表單資料的自動填入與輸入建議 使用Java實現表單資料的自動填入與輸入建議 Aug 07, 2023 pm 07:05 PM

使用Java實現表單資料的自動填入與輸入建議近年來,隨著網路的發展,表單資料填寫已成為我們日常生活的一部分。然而,填寫大量的表單資料往往會對使用者造成一定的困擾,尤其是在輸入重複的資料時。為了提高使用者的填寫效率和體驗,我們可以利用Java語言來實現表單資料的自動填入與輸入建議。本文將介紹如何使用Java來實現此功能,並提供程式碼範例供參考。首先,我們需要

php如何使用ThinkPHP6框架? php如何使用ThinkPHP6框架? May 31, 2023 pm 03:01 PM

隨著Web開發的不斷發展,開發人員需要使用一些實用的工具和框架來節省時間和努力,同時提高應用程式的品質。 ThinkPHP是一個流行的PHP框架,它可以極大地簡化開發並提高效率。在本文中,我們將學習如何使用最新版本的ThinkPHP6框架。環境需求首先,您需要確認您的系統符合以下要求:PHP7.1版本以上MySQL5.5版本及以上Composer是一個

PHP中的ThinkPHP框架指南 PHP中的ThinkPHP框架指南 May 21, 2023 am 08:51 AM

ThinkPHP是一款著名的PHP開源框架,它以高效、簡潔、易用為特點,能夠快速地建立大型的Web應用程式。本文將為您介紹ThinkPHP框架的使用方法和注意事項。一、ThinkPHP框架的安裝1.下載ThinkPHP框架可以在官網(http://www.thinkphp.cn/)上下載ThinkPHP的壓縮包並解壓縮。也可以透過Composer進行安

PHP中的表單自動填入技巧 PHP中的表單自動填入技巧 May 24, 2023 am 09:31 AM

隨著網路的不斷發展,表單已經成為了我們日常網站使用的功能之一。而讓使用者填寫表單無疑是一項煩瑣的任務,因此有必要使用一些技巧來簡化這個過程。本文將介紹在PHP中實現表單自動填入的技巧。一、使用預設值當設定表單的預設值時,可以在表單標籤中使用"value"屬性來指定。以下是範例:<inputtype="text"name=&q

開發建議:如何利用ThinkPHP框架進行微信開發 開發建議:如何利用ThinkPHP框架進行微信開發 Nov 22, 2023 pm 04:18 PM

在當今網路時代,微信已成為人們日常生活中不可或缺的一部分。無論是社交、支付、購物或訊息傳遞,微信都扮演著重要的角色。因此,利用ThinkPHP框架進行微信開發已成為許多開發者的選擇。 ThinkPHP框架是一款國產的PHP開發框架,它具有開發效率高、擴展性強、文件完善等特點,適合用於微信公眾號、小程式等開發。本文將從接取微信公眾平台、訊息處理、素材管理

如何使用PHP爬蟲類自動填入表單並提交資料? 如何使用PHP爬蟲類自動填入表單並提交資料? Aug 08, 2023 pm 12:49 PM

如何使用PHP爬蟲類自動填入表單並提交資料?隨著互聯網的發展,我們越來越需要從網頁上獲取數據,或自動填充表單並提交數據。而PHP作為一種強大的伺服器端語言,提供了眾多的工具和類別庫來實現這些功能。在本文中,我們將介紹如何使用PHP中的爬蟲類來自動填入表單並提交資料。首先,我們需要使用PHP中的curl函式庫來進行網頁資料的取得與提交。 curl庫是一個功能強大

開發建議:如何利用ThinkPHP框架進行RBAC權限管理 開發建議:如何利用ThinkPHP框架進行RBAC權限管理 Nov 22, 2023 pm 08:02 PM

《利用ThinkPHP框架進行RBAC權限管理的開發建議》隨著網路的發展,越來越多的Web應用需要實現權限管理的功能,以確保系統的安全性和可控性。 RBAC(Role-BasedAccessControl,基於角色的存取控制)作為一種成熟的權限管理模型,在實際開發中得到了廣泛的應用。 ThinkPHP作為一款受歡迎的PHP框架,提供了豐富的功能和靈活的擴充機

See all articles