thinkphp

thinkphp

ThinkPHP是為了簡化企業級套用開發和敏捷WEB套用開發而誕生的。最早誕生於2006年初,2007年元旦正式更名為ThinkPHP,並且遵循Apache2開源協定發布。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。並且擁有眾多原創功能和特性,在社區團隊的積極參與下,在易用性、擴展性和性能方面不斷最佳化和改進。

ThinkPHP是一個快速、兼容而且簡單的輕量級國產PHP開發框架,誕生於2006年初,原名FCS,2007年元旦正式更名為ThinkPHP,遵循Apache2開源協定發布,從Struts結構移植過來並做了改進和完善,同時也借鑑了國外很多優秀的框架和模式,使用面向對象的開發結構和MVC模式,融合了Struts的思想和TagLib(標籤庫)、RoR的ORM映射和ActiveRecord模式。

ThinkPHP可以支持windows/Unix/Linux等伺服器環境,正式版需要PHP5.0以上版本支持,支持MySqlPgSQLSqlite多種資料庫以及PDO擴展,ThinkPHP框架本身沒有什麼特別模組要求,具體的套用系統運行環境要求視開發所涉及的模組。

作為一個整體開發解決方案,ThinkPHP能夠解決套用開發中的大多數需要,因為其自身包含了底層架構、兼容處理、基類庫、資料庫訪問層、模板引擎、快取機制、外掛程式機制、角色認證、表單處理等常用的組件,並且對於跨版本、跨平台和跨資料庫移植都比較方便。並且每個組件都是精心設計和完善的,套用開發過程僅僅需要關注您的業務邏輯。

基本介紹

  • 外文名:ThinkPHP
  • 定義:一個開源輕量級PHP框架
  • 原名:FCS
  • 誕生:於2006年初
發展歷史,特性,簡單易用,獨創機制,重要的概念,Action對象,Dao對象,VO對象,VoList對象,分層架構,表現層,業務層,數據層,更新記錄,相關開源項目,線上手冊目錄,1簡介,2入門基礎,3架構設計,4構建套用,5開發指南,6擴展指南,7模板指南,8附錄,所獲榮譽,

發展歷史

ThinkPHP發展歷程,無數TPer一起見證了ThinkPHP的成長:
2006年01月15日, ThinkPHP的雛形版本FCS0.6.0發布;
2006年02月12日,(元宵節)發布FCS 0.6.1 版本,Google討論組成立;
thinkphp
2006年03月15日, FCS 0.7.0版本發布;
2006年05月07日, FCS 0.8版本發布;
2006年10月25日, FCS 0.9.0版本發布;
2006年12月25 日,SF項目和Google網站ThinkPHP項目申請完成;
2007年01月01日, FCS正式更名為ThinkPHP;
2007年01月08日, ThinkPHP 0.9.5版發布同期官方網站開通;
2007年02月21日, TOPThink社區暨新版ThinkPHP官方網站開通,並提供社區支持;
2007年02月25日, 發布ThinkPHP 0.9.6版本,完成FCS到ThinkPHP的正式遷移;
2007年04月29日, ThinkPHP發布0.9.7版本;
2007年07月01日, ThinkPHP發布0.9.8版本;
2007年10月15 日,ThinkPHP發布1.0.0RC1版本,完成PHP5的重構;
2007年12月15 日,ThinkPHP發布1.0.0正式版本標誌著ThinkPHP步入軌道;
2008年10月01日, ThinkPHP發布1.0.3正式版本;
2008年12月25 日,ThinkPHP發布1.5正式版本並啟動商業化支持服務,ThinkPHP進入穩定發展;
2009年05月01日, ThinkPHP 發布1.6.0RC1版本;
2009年10月01日, ThinkPHP發布2.0版本完成新的重構和飛躍,這是一次劃時代的版本;
2012年04月05日, ThinkPHP發布3.0版本 慶祝ThinkPHP發布6周年;
2012年10月08日, ThinkPHP發布3.1版本;
2012年11月11日, ThinkPHP3.1.2擴展包;
2013年05月09日,ThinkPHP發布3.1.3完整版;
2013年12月18日,ThinkPHP發布3.2正式版;
2014年10月31日,ThinkPHP發布3.2.2完整版;
2015年12月11日,ThinkPHP 5.0 Beta 發布;
2017年02月27日,Thinkphp5.0.5完整版正式發布;
2018年05月02日,Thinkphp5.1.0RC版本發布;
2019年04月22日,Thinkphp6.0RC2版本發布;

特性

簡單易用

模型(M):模型的定義由Model類來完成。Model類位於項目目錄下面的LibModel目錄。
控制器(C):套用控制器(核心控制器)和Action控制器都承擔了控制器的角色,區別在於Action控制器完成業務過程,而套用控制器(App類)負責調度控制。Action控制器位於項目目錄下面的LibAction目錄。
THINKPHP初始頁面THINKPHP初始頁面
視圖(V):模板的實現是和框架無關的,做到了100%分離,可以獨立預覽和製作。模板目錄位於項目目錄下面的Tpl目錄。

獨創機制

ThinkTemplate是一個使用了XML標籤庫技術的編譯型模板引擎,支持兩種類型的模板標籤,使用了動態編譯和快取技術,而且支持自定義標籤庫。其特點包括:
1)支持XML標籤庫和普通標籤的混合定義;
2)編譯一次,下次直接運行而無需重新編譯;
3)模板檔案更新後,自動更新模板快取;
4)自動載入當前操作的模板快取檔案,無需指定模板檔案名稱稱;
5)支持編碼轉換和Content-Type更換;
6)模板變數輸出前綴支持,避免變數名稱衝突;
THINKPHP目錄結構THINKPHP目錄結構
7)模板常量替換,無需設定模板變數;
8)支持變數組合調節器和格式化功能;
9)支持替換其它模板引擎外掛程式使用;
10)支持獲取模板頁面內容。
內置XML模板引擎,支持標籤庫
富模型支持
1)聚合模型:
聚合模型是一種虛擬模型,用於把數據表的欄位抽象化,更加容易理解和操作。
我們可以把數據表中的某些屬性進行數據封裝,這樣就把枯燥的數據表欄位賦予更好的可讀性。
靜態模型可以讓模型的數據靜態化,而不需要頻繁和資料庫打交道,可以用於不經常改變的數據表。而且ThinkPHP在ORM層上面模擬實現了資料庫的視圖功能,這是ThinkPHP獨創的一項技術,使得多表的關聯查詢具有更高的效率和可操作性,而無需定義複雜的關聯關係,讓關聯關係更加淺顯易懂。
有些時候,數據表的數據一旦添加後就不再容易變化,我們更希望把這樣的模型數據靜態化,而不需要再次訪問資料庫。ThinkPHP支持靜態模型的概念,一旦把模型設定為靜態,那么會在第一次初始化的時候獲取數據表的全部數據,並生成快取,以後不會再連線資料庫。而只需要直接訪問模型的dataList數據即可。
3)視圖模型
ThinkPHP在ORM模型裡面模擬實現了資料庫的視圖模型,該功能可以用於多表查詢。
要定義視圖對象,需要設定viewModel為true,然後設定viewFields屬性即可。
CURD和操作高度自動化支持
ThinkPHP提供了靈活和方便的數據操作方法,不僅實現了對資料庫操作的四大基本操作(CURD):創建、讀取、更新和刪除的實現,還內置了很多實用的數據操作方法,提供了ActiveRecords模式的最佳體驗。
豐富的查詢語言支持
ThinkPHP大多數情況使用的都是對象查詢,因為充分利用了ORM查詢語言,了解查詢條件的定義對使用對象查詢非常有幫助,對於複雜的查詢,或者從安全方面考慮,可以使用HashMap對象或者索引數組來傳遞查詢條件。
目錄結構自動創建THINKPHP目錄結構
ThinkPHP具有項目目錄自動創建功能,你只需要定義好項目的入口檔案,第一次執行入口檔案的時候,系統會自動創建項目的相關目錄結構,如果是linux環境下面需要給項目入口檔案裡面指定的路徑設定可寫許可權。
ThinkPHP的模型支持主從式資料庫的連線,配置DB_DEPLOY_TYPE為1可以採用分散式資料庫支持。
多資料庫連線和切換支持
如果需要在特殊的時候連線多個資料庫,那么可以嘗試使用ThinkPHP的多資料庫連線特性:包括相同類型的資料庫和不同類型的資料庫。(注意:所謂的相同類型資料庫的定義是指和項目配置檔案或者模型的資料庫連線的資料庫類型相同。)
ActiveRecords模式和豐富的ROR特性
ThinkPHP實現了ActiveRecords模式的ORM模型,採用了非標準的ORM模型:表映射到類,記錄(集)映射到對象,欄位屬性映射到對象的虛擬屬性。最大的特點就是使用方便,從而達到敏捷開發的目的。
靈活簡單的項目配置
ThinkPHP提供了靈活的配置功能,採用最有效率的PHP返回數組方式定義,支持慣例配置、項目配置、調試配置和模組配置,並且會自動生成配置快取檔案,無需重複解析的開銷。對於有些簡單的套用,你無需配置任何配置檔案,而對於複雜的要求,你還可以增加模組配置檔案,另外ThinkPHP的動態配置使得你在開發過程中可以靈活的調整配置參數。
ThinkPHP在項目配置上面創造了自己獨有的分層配置模式,其配置層次體現在:慣例配置-->項目配置-->模組配置-->操作(動態)配置,優先順序從右到左(在沒有生效的前提下)。
模型自動驗證和處理
系統內置了數據對象的自動驗證功能,而大多數情況下面,數據對象是由表單提交的$_POST數據創建。需要使用系統的自動驗證功能,只需要在Model類裡面定義$_validate屬性,是由多個驗證因子組成的數組,支持的驗證因子格式:驗證欄位,驗證規則,錯誤提示,驗證條件,附加規則,驗證時間。
靜態頁面生成和多元化快取機制
ThinkPHP內置了靜態快取的功能,並且支持靜態快取的規則定義。要使用靜態快取功能,需要開啟HTML_CACHE_ON參數,並且在項目配置目錄下面增加靜態快取規則檔案htmls.php。
豐富的資料庫及PDO支持
SEOURL路由支持
AJAX支持
易擴展的系統基類
系統基類庫
ThinkPHP框架通過基類庫的概念把所有系統類庫都集成在一起,包括ThinkPHP的核心類庫。
基類庫分成Think核心類庫、ORG擴展類庫,在這主要介紹的是核心基類庫,核心基類庫的作用是完成框架的通用性開發而必須的基礎類和常用工具類等,包含有:
Think.Core 核心類庫包
Think.Db 資料庫類庫包
Think.Util 系統工具類庫包
Think.Template 內置模板引擎類庫包
Think.Exception 異常處理類庫包函式館
ThinkPHP內置了一個系統公共函式館,提供了一些系統需要的函式,系統函式館位於ThinkPHP的Common目錄下面,名稱為functions.php。
每個項目可以定義自己的函式館,位於項目的Common目錄下面的common.php檔案。
如果項目在Common目錄下面有定義自己的common.php檔案,框架會在初始化的時候自動導入,而無需自己導入。
匹配導入
Import方法是ThinkPHP內建的類庫和檔案導入方法,提供了方便和靈活的類似於命名空間的檔案導入機制。
自動編碼轉換
ThinkPHP框架的檔案全部採用UTF-8編碼格式,UTF-8的支持和自動輸出編碼轉換的功能讓頁面表現更加靈活。您可以配置輸出的頁面編碼格式,如gb2312等(默認採用UTF-8輸出)。系統根據配置檔案中設定的編碼格式自動對頁面進行編碼轉換,支持iconv和mb_string兩種方式,為了提高效率,如果系統的模板編碼設定和輸出編碼設定項相同,則不會進行編碼轉換。ThinkPHP可以設定模板編碼、輸出編碼和資料庫編碼,並自動完成轉換工作,讓你的套用不再受編碼的苦惱。

重要的概念

要掌握ThinkPHP,首先要了解其中的幾個重要概念,對於熟悉Java開發的朋友,應該很容易理解下面的一些概念。

Action對象

和Struts框架的Action類似,Action對象主要提供套用邏輯的控制和處理,屬於ThinkPHP的控制層,由核心的App類完成模組和操作的解析後直接轉交給相應的Action對象處理。套用類中的所有Action對象都繼承系統的Action基類

Dao對象

是指DataAccessObject(數據訪問對象),Dao設計模式把底層的數據訪問邏輯和業務邏輯分開,夾在業務層與數據層中間,用於資料庫訪問和操作。可以針對單表和多表操作。ThinkPHP中的Dao對象屬於建立在抽象資料庫訪問層之上的事務性對象。

VO對象

是指ValueObject(數據對象),更加精確的說是業務對象,因為VO對象是存活在業務層的,供業務邏輯使用的。VO對象和數據表存在一種映射關係,VO對象的每個屬性對應數據表(或者視圖)的一個欄位,你完全可以添加其他非數據表欄位的VO對象屬性,以用於業務邏輯操作,例如關聯欄位。VO對象有個特殊的保留屬性_info,是一個數組變數,用來保存該VO對象的一些特殊信息。和VO對象對應的概念還有PO(持久數據對象),VO和PO的概念都來自於O/RMapping(ObjectRelationalMapping,對象關係映射),PO只能用在數據層(也就是說PO對象的屬性必須和數據表一一對應),VO用在業務邏輯層表示層(可以有自己的額外屬性)。各層操作屬於該層自己的數據對象,這樣就可以降低各層之間的耦合,便於以後系統的維護和擴展。如果將PO用在各個層中就相當於我們使用全局變數,我們知道在OO設計非常不贊成使用全局變數。

VoList對象

在ThinkPHP框架中,把查詢後的數據集(ResultSet)轉換成數據列表對象,也就是VOLIST對象,和ResultSet對象不同的是每個記錄就相當於一個VO對象。在VOLIST對象中可以方便地遍歷和操作VO對象。VO對象和VOLIST對象都屬於ThinkPHP框架中的實體對象,是數據操作的基本元素。如果你在開發過程中沒有使用Dao模式,而是通過資料庫驅動類直接運算元據庫,那么返回的是ResultSet對象。ThinkPHP系統提供了從ResultSet對象轉換為VOLIST對象的方法。
組件和外掛程式支持
基於角色的許可權控制體系
企業級的套用是離不開安全保護的,ThinkPHP以基於SpringAcegi安全系統作為參考原型,並做了簡化,以適合目前的ThinkPHP結構,提供了一個多層的、可定製的安全體系來為套用開發提供安全控制。安全體系中主要有: 安全攔截器、認證管理器、決策訪問管理器 、運行身份管理器。

分層架構

ThinkPHP的分層架構採用三層架構模式:

表現層

包含模板視圖、用戶界面、JS、Flash等通過模板引擎的支持,可以使用標籤定義簡化表現層的定義工作。

業務層

包含業務接口層、業務邏輯層、實體層、數據訪問層Action控制器作為業務接口層,提供系統各種業務操作的入口。因此,不提倡在控制器類中寫過多的業務邏輯代碼,雖然說很難嚴格控制。具體的業務邏輯應該封裝到數據訪問對象(Dao)類中實現,如果覺得過於複雜,還可以把子業務在Helper類中包裝後統一調用。業務處理過程一般會構造出業務實體對象(如Vo對象),對業務實體對象的存取通過數據訪問層完成。數據訪問層把實體對象和資料庫數據之間建立映射關係,並且封裝了通用的數據操作。

數據層

支持的資料庫有MySql、MsSql、PgSql、Oracle、Sqlite,最新版本已經提供PDO的支持,資料庫的選用和業務邏輯沒有關係。

更新記錄

ThinkPHP 5.0正式版發布 2016/09/15
主要特性包括:
--------------------------------------------------------------
規範:遵循PSR-2、PSR-4規範,Composer及單元測試支持;
嚴謹:異常嚴謹的錯誤檢測和安全機制,詳細的日誌信息,為你的開發保駕護航;
靈活:減少核心依賴,擴展更靈活、方便,支持命令行指令擴展;
API友好:出色的性能和REST支持、遠程調試,更好的支持API開發;
高效:惰性載入,及路由、配置和自動載入的快取機制;
ORM:重構的資料庫、模型及關聯,MongoDb支持;
--------------------------------------------------------------
相對於RC4版本,主要更新如下:
請求和路由:
  • Request對象支持動態綁定屬性
  • 定義了路由規則的URL原地址禁止訪問
  • 改進路由規則存儲結構
  • 路由分組功能增強,支持嵌套和虛擬分組
  • 路由URL高效反解
  • 改進Request對象param方法獲取優先權
  • 路由增加name方法設定和獲取路由標識
  • 增加MISS和AUTO路由規則
  • Route類增加auto方法 支持註冊一個自動解析URL的路由
  • 路由規則支持模型綁定
  • 路由變數統一使用param方法獲取
  • 路由規則標識功能和自動標識
  • 增加生成路由快取指令 optimize:route
  • Request對象增加route方法單獨獲取路由變數
  • Request對象的param get post put request delete server cookie env方法的第一個參數傳入false 則表示獲取原始數據 不進行過濾
  • 改進自動路由標識生成 支持不同的路由規則 指向同一個路由標識,改進Url自動生成對路由標識的支持
  • 改進Request類 filter屬性的初始化
  • 改進Request類的isAjax和isPjax方法
  • Request類增加token方法
  • 路由配置檔案支持多個 使用 route_config_file 配置參數配置
  • 域名綁定支持https檢測
  • 改進域名綁定 支持同時綁定模組和其他 支持綁定到數組定義的路由規則,取消域名綁定到分組
  • 路由規則增加PATCH請求類型支持
  • 增加route_complete_match配置參數設定全局路由規則定義是否採用完整匹配 可以由路由規則的參數complete_match 進行覆蓋
  • 改進路由的 後綴參數識別 優先於系統的偽靜態後綴參數
  • Url類增加root方法用於指定當前root地址(不含域名)
  • 改進Url生成對可選參數的支持
資料庫:
  • 查詢條件自動參數綁定
  • 改進分頁方法支持參數綁定
  • Query類的cache方法增加快取標籤參數
  • Query類的update和delete方法支持調用cache方法 會自動清除指定key的快取 配合查詢方法的cache方法一起使用
  • 改進Query類的延遲寫入方法
  • Query類的column和value方法支持fetchsql
  • 改進日期查詢方法
  • 改進存儲過程方法exec的支持
  • 改進Connection類的getLastInsID方法獲取
  • 記錄資料庫的連線日誌(連線時間和DSN)
  • 改進Query類的select方法的返回結果集判斷
  • Connection類增加getNumRows方法
  • 資料庫事務方法取消返回值
  • 改進Query類的chunk方法對主鍵的獲取
  • 改進當資料庫驅動類型使用完整命名空間的時候 Query類的builder方法的問題
模型:
  • 增加軟刪除功能
  • 關聯模型和預載入改進
  • 關聯預載入查詢閉包支持更多的連貫操作
  • 完善savell方法支持更新和驗證
  • 關聯定義統一返回Relation類
  • Model類的has和hasWhere方法對join類型的支持
  • Model類的data方法 批量賦值數據的時候 清空原始數據
  • Model類的get方法第三個參數傳入true的時候會自動更新快取
  • Model類增加唯讀欄位支持
  • Model類增加useGlobalScope方法設定是否啟用全局查詢範圍
  • Model類的base方法改為靜態定義 全局多次調用有效
  • Model類支持設定主鍵、欄位信息和欄位類型,不依賴自動獲取,提高性能
  • Model類的data方法 支持修改器
  • 改進Relation類對非數字類型主鍵的支持
  • 改進Relation類的一對多刪除
日誌和快取:
  • 支持日誌類型分離存儲
  • 日誌允許設定記錄級別
  • 增加快取標籤功能
  • 快取類增加pull方法用於獲取並刪除
  • cache助手函式增加tag參數
  • 簡化日誌信息,隱藏資料庫密碼
  • 增加cache/session redis驅動的庫選擇邏輯;
  • memcached驅動的配置參數支持option參數
  • 調試模式下面 日誌記錄增加頁面的header和param參數記錄
  • memcached快取驅動增加連線賬號密碼參數
  • 快取支持設定complex類型 支持配置多種快取並用store切換
  • 快取類增加tag方法 用於快取標籤設定 clear方法支持清除某個快取標籤的數據
  • File類型日誌驅動支持設定單獨檔案記錄不同的日誌級別
  • 改進檔案快取和日誌的存儲檔案名稱命名規範
  • 快取類增加inc和dec方法 針對數值型數據提供自增和自減操作
  • Cache類增加has方法 get方法支持默認值
其他:
  • 視圖類支持設定模板引擎參數
  • 增加表單令牌生成和驗證
  • 增加中文驗證規則
  • 增加image和檔案相關驗證規則
  • 重定向Response對象支持with方法隱含傳參
  • 改進Session類自動初始化
  • session類增加pull方法用於獲取並刪除
  • 增加Env類用於獲取環境變數
  • Request類get/post/put等更改賦值後param方法依然有效
  • 改進Jump跳轉地址支持Url::build 解析
  • 最佳化Hook類
  • 套用調試模式和頁面trace支持環境變數設定
  • config助手函式支持 config('?name') 用法
  • 支持使用BIND_MODULE常量的方式綁定模組
  • 入口檔案自動綁定模組功能
  • 改進驗證異常類的錯誤信息和模板輸出,支持批量驗證的錯誤信息拋出
  • 完善console 增加output一些常用的方法
  • 增加token助手函式 用於在頁面快速顯示令牌
  • 增加halt方法用於變數調試並中斷輸出
  • 改進Validate類的number驗證規則 和 integer區分開
  • optimize:autoload增加對extend擴展目錄的掃描
  • 改進Validate類的boolean驗證規則 支持表單數據
  • 改進cookie助手函式支持 判斷是否存在某個cookie值
  • 改進abort助手函式 支持拋出HttpResponseException異常
  • 改進File類增加對上傳錯誤的處理
  • 改進File類move方法的返回對象增加上傳表單信息,增加獲取檔案散列值的方法
  • 改進File類的move方法的返回對象改為返回File對象實例
  • 增加clear和optimize:config 指令
  • 改進File類和Validate類的圖像檔案類型驗證
  • 控制器的操作方法支持注入Request之外的對象實例
  • Request類 param(true) 支持獲取帶檔案的數據
  • input助手函式第一個參數增加默認值
  • Validate類增加image驗證規則 並改進max min length支持多種數據類型
  • json輸出時數據編碼失敗後拋出異常
調整:
  • 廢除路由映射(靜態路由)定義
  • 取消url_deny_suffix配置 改由路由的deny_ext參數設定
  • 模型save方法返回值改為影響的記錄數,取消getId參數
  • Request對象controller方法返回駝峰控制器名
  • 控制器前置操作方法不存在則拋出異常
  • Loader類db方法增加name標識參數
  • db助手函式增加第三個參數用於指定連線標識
  • Sqlsrv驅動默認不對數據表欄位進行小寫轉換
  • 移除sae驅動 改為擴展包
  • Oracle驅動移出核心包
  • Firebird驅動移出核心包
  • 取消別名定義檔案alias.php
  • 配置參數讀取的時候取消環境變數判斷 需要讀取環境變數的時候使用Env類
  • 環境變數定義檔案更改為 .env 由原來的PHP數組改為ini格式定義(支持數組方式)
  • 狀態配置和擴展配置的載入順序調整 便於狀態配置檔案中可以更改擴展配置的參數
  • 取消域名綁定到路由分組功能
  • 控制器類的success和error方法url參數支持傳入空字元串,則不做任何處理
  • 控制器的error success result redirect方法均不需要使用return
  • 創建目錄的許可權修改為0644
TinkPHP 3.2.2發布 2014/4/15
ThinkPHP3.2.2版本在修正一些BUG後,重寫了模組的自動生成,並支持控制器和模型的批量生成,增加了配置檔案多格式支持,以及一些小的細節改進,該版本屬於小版本更新。
1、套用支持包括PHP/JSON/INI/XML/YAML以及自定義格式的配置檔案;
2、支持模組的自動生成和控制器/模型的批量生成;
3、增加外掛程式控制器的訪問支持;
4、cookie函式增加httponly參數支持;
5、改進模型類的安全處理;
6、修正了3.2.1發布以來社區反饋的一些BUG(詳見更新日誌);
TinkPHP3.2.1發布 2014/2/14
相對於3.2.0版本,主要更新如下
  • 性能較比3.2.0版本提升30%;
  • 套用模組中的類庫可以配置不使用命名空間;
  • 支持運行時Lite檔案生成,用於替換套用入口檔案;
  • 改進路由定義的閉包支持;
  • 增加API套用模式,更加高效;
  • 增加REST、RPC、HPROSE和YAR控制器擴展支持;
  • 增加REPL行為擴展,增強框架開發的調試手段;
  • 重寫查詢快取功能;
  • 語言定義支持變數傳入;
  • C函式獲取配置參數支持默認值;
  • 支持操作方法綁定到類;
  • 改進和修正Image、Verify和Upload類;
  • 修正了3.2.0發布以來社區反饋的一些BUG;
TinkPHP3.2發布 2013/12/18
這次版本的關鍵字是模組化、驅動化和雲平台。
模組化:3.2版本的架構專門為模組化設計做了最佳化和調整,從而更適合企業級套用,當然這很大一部分得益於對命名空間的支持以及自動載入機制。同時,你會看到一個小的細節,ThinkPHP3.2版本自帶了一個套用入口檔案和套用目錄。
驅動化:3.2版本在設計類庫的時候儘量採用驅動式設計,對於同一功能在不同環境和類型的操作只需要配置驅動即可輕鬆移植,不需要改變現有代碼,同時也讓你的套用能夠適用於更多更複雜的運行環境。
雲平台:3.2版本在底層核心就包含了對各種雲平台的支持,通過定製不同的套用(場景)模式以及對應的驅動就可以輕鬆支持雲平台的部署開發,你可以實現在本地開發,然後直接無縫部署到雲平台,已經支持的包括SAE和BAE3。

功能
3.2版本在此前的3.1.3版本之上,引入了命名空間,強化了驅動化和行為,增強了模組化的概念和對雲平台的支持,並改進了諸多的細節。
主要改進包括
  • 模組化架構的全新設計
  • 全新命名空間和自動導入機制
  • 改進的路由功能
  • 主題的動態切換支持
  • 更強大的Action參數綁定
  • 模型的參數綁定支持
  • 改進的域名部署支持
  • 全新的套用模式
  • 全新重寫的工具類(包括圖像、驗證碼和上傳等)
  • 提供更好的雲平台支持
  • 修正之前發現的眾多BUG
注意:3.2以上版本對PHP的版本要求為PHP5.3+ (不包含PHP5.3dev和PHP6)
TinkPHP3.1.3發布 2013/05/09
更新
該版本針對3.1.2進行了一些改進和完善,主要包括:
改進異常處理,支持致命錯誤捕獲;
針對PDO驅動和Sqlsrv驅動的完善,支持參數綁定;
增加變數安全獲取和過濾的快捷方法I;
分組支持部署到完整域名或IP;
A和D方法支持跨分組調用;
改進模版引擎的定界符對特殊字元的支持;
修正JS代碼可能對模版標籤的混淆;
模型的where方法支持多次調用;
默認關閉頁面壓縮輸出;
異常日誌的紀錄;
Action類的assign方法支持連貫操作;
資料庫錯誤信息包含錯誤代碼;
修正上一版本的一些BUG;
TinkPHP3.1.2發布 2012/11/17
[更新]
獨立分組功能
模板繼承
模組和操作映射
AJAX增加jsonp格式支持
分組支持單獨配置默認模組和操作
核心編譯過程的最佳化
SAE引擎升級
改進的分頁類
修正查詢語言的一處安全隱患
ThinkPHP 3.1發布 2012/09/03
[更新]
更加安全的防護和過濾體系
MVC多層支持
Action參數綁定支持
模型命名範圍支持
查詢條件和SQL預處理功能
動態設定自動驗證和自動完成支持
更加靈活強大的快取管理方法
日誌記錄簡化、增加IP支持
致命錯誤的捕獲機制完善
頁面Trace機制改進和分類顯示支持
超過128項更新
ThinkPHP 3.0.1 開發版
2012-04-05
[更新]
Action參數綁定支持
模型類命名範圍支持
全局系統變數安全過濾支持
增加IS_GET IS_POST IS_PUT 等請求類型常量
日誌記錄改進 最佳化日誌大小 增加IP記錄
U函式對子域名部署的增強和最佳化
模型類增加filter連貫操作方法 用於對數據的安全過濾
模型類的data方法支持獲取當前數據對象
Action類增加_param方法支持 可以自動根據當前提交類型 獲取參數
Action類的_get _post方法支持多函式過濾
改進ajaxReturn方法
改進success和error方法
增加自動驗證的規則
分組模式下模型分組可以自動載入
模型類增加close方法 驅動類支持多資料庫連線關閉
模型類增加表單提交欄位合法性檢測 配置insert_fields 和 update_fields
模型強制進行數據欄位類型驗證
增加DB_SLAVE_NO配置參數 用於指定讀伺服器的序號
最佳化模型的create方法的數據對象生成
自動驗證的function和callback規則支持多欄位
[3.0版本]2012-3-23
[修正]
修正視圖模型擴展的checkOrder方法
修正U方法對默認分組的完善
修正Redis快取類
修正sqlsrv驅動
修正模式擴展中的Model類
修正模型的where方法傳人空參數的時候導致delete方法刪除全部數據的問題
修正路由定義的大寫被強制轉換為小寫的錯誤
修正靜態快取讀取行為擴展
修正Pgsql驅動
修正S方法的快取有效期
修正Mongo驅動類
[刪除]
取消path_info標籤擴展位置
取消TAG_NESTED_LEVEL配置參數,該參數已經無效
取消CheckTemplate行為擴展 併入核心App類的init方法
[增加]
App類增加action_name 行為標籤位置 用於改變操作方法名
增加引擎擴展 SAE納入第一個引擎擴展
增加ENGINE_PATH常量定義 用於引擎擴展使用
增加PATH_INFO的兼容判斷功能
增加URL_PATHINFO_FETCH配置參數
增加FireShowPageTrace行為擴展 能將Trace信息輸出到火狐的firebug
增加Wincache快取擴展驅動
[完善]
SAE引擎代碼最佳化
最佳化ThinkPHP入口檔案
改進模組名的安全檢測 取消異常拋出改成引導到空模組環節
改進Widget類的template屬性處理,不區分大小寫 方便定義
模型的field方法支持 field(true) 用法 表示獲取數據表的全部欄位 (而不是*)
改進對mysql驅動的關鍵字處理方法parseKey
改進MongoDb驅動對讀寫分離的支持
改進模板引擎的標籤別名解析 別名可以無需要定義解析方法
改進Db和sqlite快取驅動類對有效期參數的判斷
規則路由定義支持完整匹配
改進模板檢測的自定義模板目錄支持
[調整]
系統調試模式配置檔案關閉模板快取
模板字元串替換定義TMPL_PARSE_STRING區分大小寫
配置參數只支持一級不區分大小寫 二級以下配置參數區分大小寫調用
行為日誌記錄類型改為Log::INFO 類型,方便通過配置檔案 單獨關閉相關行為日誌顯示和記錄
checkLang行為擴展調整語言包命名規範調整 項目公共語言包 common.php 分組語言包 分組名.php 模組語言包 分組名_模組名.php 或者 模組名.php
[2.1版本]2011-4-30
這次的重點更新是在核心套用上的改造和效率方面的提升,主要體現在:
URL路由靈活模式,支持常規路由定義,正則路由匹配
對比2.0版本,新的路由模式更體貼和套用更方便,同時在執行效率上也得到了更簡潔而有效的處理。最重要的是定義路由將更簡單和直接,並且可選擇使用獨立檔案定義或是直接配置定義。
2.1版本對分組模式完善了細節流程上的解析機制,增加了實用的常量定義和模板替換,同時添加了對二級域名的友好支持,對項目部署提供了更多方便
ThinkPHP內置模板引擎捨棄了原來xml模式的解析,直接改由類屬性進行定義標籤,既減少了檔案載入,提升了解析效率,在自定義標籤和標籤擴展上,也更加簡單和方便了
允許項目指定編譯快取檔案定義
系統函式館functions列入核心編譯檔案,不再默認綁定到核心編譯
以上兩項更新雖微,但實際上意義非凡,對於多項目多套用同時部署架構時會起到非常重要的作用,核心的自由度更寬更廣了。
改進tag函式,外掛程式機制可以直接定義要執行的行為
 項目初始化提供新的可自定義的部署模式
允許自定義項目首次運行時的訪問處理方式,系統由原來的簡單成功提示,改為探針模式友好提示,對於使用ThinkPHP部署的項目,在初始運行時將方便地提供伺服器相關信息,對是否支持ThinkPHP運行環境進行探測並報告和提出建議。
提供AMF模式支持
 提供PhpRPC模式(感謝vanvvdot提供擴展)
 lite模式增強,支持使用內置模板引擎
 數據插入時允許進行更新操作
 提供了更簡潔的連貫操作方式的資料庫切換
 新增模板常量、變數定義等實用標籤
 其它一些套用細節處理可對比svn更新記錄
 Images圖像類恢復圖片水印支持
 Model類恢復批量插入數據的addAll方法
 最佳化項目核心運行進程細節,去掉不常用功能。
 最佳化系統進程統計處理,提供G函式可進行記錄和統計。
 完善了多語言在各伺服器環境下的兼容性統一
 完善了RelationModel方法兼容問題
 完善了序列化欄位處理
 完善了數據編輯的時候唯一檢測的驗證
 增加是否記錄異常信息日誌開關 LOG_EXCEPTION_RECORD
 去除了原svn上的二級域名支持
 去除了原svn上的前後置判斷處理
 去除了個別不通用功能和配置
 去除了URL重定向處理,減少HTTP請求的同時,也避免了因此帶來的一些錯誤。
 對於以上已去除的功能開關不再生效
[1.0.4 版本] 2008-5-16
修正關聯寫入和數據欄位過濾的衝突
修正哈希子目錄快取方式
模組配置檔案命名改為:模組名+_config.php
修正Compare標籤
修正CX標籤庫的判斷標籤
修正模板引擎的IF標籤的條件BUG
修改多資料庫連線和切換機制,取消addConnect方法的eqType參數,避免了因來回切換的時候的錯誤
修正Db快取和Sqlite快取的數據過期判斷
增加項目配置檢測,如果項目配置檔案發生修改,則重新生成編譯項目快取。
增加跳轉頁面模板和404模板配置配置方式和Action類的display方法templateFile參數一致,默認配置: 'ACTION_JUMP_TMPL'=> 'Public:success', 'ACTION_404_TMPL'=> 'Public:404'
Action類增加404操作方法頁面跳轉操作和404操作支持模板檔案配置
修正html標籤庫的link和import標籤
增加數據查詢的IS NULL 和 IS NOT NULL支持
修正連貫操作的一些警告錯誤
完善join分析 支持left right等方式
修正模板引擎在開啟短標籤的情況下無法正常輸出xml標識的問題
修正ORG.Date.Date類的maxDayOfMonth方法
完善多資料庫連線的切換
修改命令行自動創建工具build
修正連貫操作的field方法的判斷錯誤
修正Db類的一處where條件判斷的小問題
rand_string加上中文隨機字元串生成
修正兼容方法json_encode對布爾值的判斷
修正ArrayList類的addall方法
修正max min avg sum等查詢方法返回浮點型數據錯誤的問題
修正數組方式查詢的自己使用Like問題
iterate標籤增加mod屬性,用於計算循環變數的取模替換原來的odd屬性
增加Input類,用於輸入數據管理
刪除已經廢棄的目錄檢查外掛程式
最佳化模板引擎解析,避免多次實例化模板解析類並簡化模板解析類的寫法,去掉架構方法定義
修改mobile驗證的正則
增加了分頁類關於負數的判斷
部分CX標籤的屬性可以支持特殊模板變數
F方法生成的檔案會自動加上THINK_PATH判斷,避免直接執行
取消了當指定模組和操作不存在的時候執行默認模組和默認操作,由用戶自己定義空模組和空操作來處理。
增加了連貫操作的data方法,用於指定要操作的數據
去掉了已經廢棄的三個配置參數:DB_CACHE_ON DB_CACHE_TIME DB_CACHE_MAX
增加表單提交的MAGIC_QUOTES_GPC判斷
model類的query和execute方法支持使用__TABLE__字元串系統會自動替換成當前模型對應的表名
調整了空操作和直接判斷模板檔案的順序空操作優先執行
修正Cookie類支持關閉瀏覽器就失效的情況設定COOKIE_EXPIRE為0或者空字元串或者在使用的時候傳遞參數0 Cookie::set($name,$value,0);
項目編譯快取檔案也加上是否去掉注釋的開關
[1.0.3 版本] 2008-3-16
增加空模組支持 如果指定的模組不存在會首先定位是否存在Empty模組
增加核心編譯檔案的去除空白和注釋的開關,在入口檔案定義 STRIP_RUNTIME_SPACE 常量為false 可以關閉去除空白和注釋
Action快取由原來的userCache成員屬性控制改為項目參數 ACTION_CACHE_ON 控制,便於動態控制
增加資料庫欄位快取的開關 慣例配置增加DB_FIELDS_CACHE 用以設定資料庫欄位是否快取,默認進行快取
修正xcache和sqlite快取方式的讀寫次數記錄
使用視圖模型的時候,如果主鍵是id,不需要再定義getPk方法
修正多語言和多模板的cookie問題
入口檔案免設定APP_NAME APP_PATH
完善Cookie
修正模板檢查的時候組件化的支持
模型類的查詢操作支持連貫方法
去掉了一些廢棄的慣例配置參數,包括:DATA_CACHE_ON 和 DATA_CACHE_MAX
慣例配置增加了DATA_CACHE_SUBDIR參數控制檔案快取方式是否自動使用子目錄哈希快取
在項目根目錄不存在的情況下自動創建
完善對跨庫查詢的支持
目錄自動創建支持寫入安全檔案
[ 1.0.2 ] 2008-2-21
Model類增加toArray方法
修正因Log類的改動導致Trace錯誤信息無法正常顯示的問題
數據查詢返回的數據集由ArrayObject對象改成數組
修正Model類的create方法在定義欄位映射的下面的bug
修正虛擬模型下面create方法的bug
Model類的facade方法增加數據表欄位的檢測
最佳化Image類的showAdvVerify方法
修正標籤庫的compare標籤
Trace配置檔案由原來的_trace.php更名為trace.php
項目調試配置檔案由原來的_debug.php更名為debug.php
項目配置檔案由原來的_config.php更名為config.php
路由定義檔案由原來的_routes.php 更名為 routes.php
靜態定義檔案由原來的_htmls.php 更名為 htmls.php
Model類的create方法無需type參數,自動判斷新增和編輯模型數據
增加第一次運行目錄自動生成功能(只需要定義入口檔案)
默認項目編譯快取目錄為Temp目錄
[ 1.0.1 ] 2008-2-2
修正Db類在Oracle下面的parseLimit方法判斷
最佳化資料庫驅動類的查詢結果獲取
Model 類增加欄位的表達式插入和更新支持
完善了Db類的條件查詢欄位中帶有空格的處理
Model類增加了delConnect方法用於刪除動態增加的資料庫連線
增強了分散式資料庫的支持 可以設定是否需要讀寫分離
Model類增加智慧型切換功能 switchConnect方法可以自動識別是否是相同的資料庫連線類型
增加了組件模組的URL分割定義配置 COMPONENT_DEPR 包括對操作鏈的設定採用相同的參數定義
修正Model類的count等統計方法會自動快取的問題 DB類默認關閉查詢快取
修正RBAC組件的許可權判斷
修正組件模組方式下面的模板檔案../Public的替換
修正Html標籤庫list標籤的actionlist屬性的支持
修正PDO類在某些資料庫下面的getAll方法的BUG
增加核心快取檔案的開關功能 在入口檔案裡面設定 CACHE_RUNTIME 為 false
修正了使用組件模組的時候模板檔案中__URL__的解析問題
修正模板和語言的切換cookie
Model類增加addConnect和switchConnect方法 用於支持多資料庫的連線
修正了語言包的快取導致切換語言無效的問題
Db類增加多資料庫連線的內置支持
修正Model類在某些資料庫下面where條件表達式不支持where 1 的情況
Db類增加getLastSql方法用於獲取最後一次查詢的sql語句
完善Log類的操作以及最佳化錯誤日誌的寫入
修正model的資料庫連線配置讀取
ajax返回之前保存日誌記錄
完善compare標籤
改進Vendor函式的baseUrl參數定義
改進項目語言包的定義 不同語言分成不同子目錄
簡化了query方法的資料庫快取
增加clearCache方法,用於清空項目相關快取目錄
增加firebird資料庫驅動支持
修正pgsql驅動
修正 app.php 檔案的編譯快取路徑的問題
增加編譯快取路徑的設定 RUNTIME_PATH
[ 1.0.0 ] 2007-12-25
最佳化了執行效率和記憶體開銷
Import方法增加同名檢測和類檢測
完善PHP 5.2.0以下版本的支持
去掉了核心對Config、Language、CookieSession類庫的依賴
去掉了Action類內置的默認操作
改進了MySqli的驅動類庫
修正了主鍵不是自動增長的時候Model的add方法返回錯誤
修正了mysqli的escape_string方法
修正了PDO的連線params參數問題
修正了Model的findAll的關聯查詢問題
修正了Model類的getModelName方法問題
修正了RBAC的模組大小寫設定
去掉volist resultset標籤,均作為iterate標籤的別名
增加了項目編譯機制和核心類庫編譯機制
標籤庫定義增加標籤的別名定義
XML模版結束標籤增加對空格的支持
增加compare標籤和eq neq gt egt lt elt heq 和nheq標籤別名
增加了多模版和多語言的開關
RBAC認證增加了操作的認證設定,之前只支持模組的認證設定

相關開源項目

  1. ThinkSNS
    ThinkSNS 基於許多優秀的開源軟體開發,提供全方位的社交網路(SNS)解決方案。ThinkSNS源於辦公圈項目,WEB端基於國內技術領先的ThinkPHP框架開發,另外還有IM客戶端軟體。ThinkSNS全部基於開源項目,同時也作為開源項目,免費提供給用戶使用。項目框架都有完善的文檔和實例,非常適合二次開發。能為致力於SNS方向的站長提供幫助,是我們的最大的夢想!
  2. OneThink
    OT是ThinkPHP官方發布的內容管理框架;OneThink以其便捷的建站、豐富的擴展、靈活的二次開發,以及雲服務的支持,為廣大個人和企業建站帶來新的契機和機遇,即將成為網際網路新的弄潮兒。
  3. ThinkCMF
    ThinkCMF是由第三方團隊開發的中文內容管理框架;ThinkCMF是一款基於PHP+MYSQL開發的中文內容管理框架。ThinkCMF提出靈活的套用機制,框架自身提供基礎的管理功能,而開發者可以根據自身的需求以套用的形式進行擴展。每個套用都能獨立的完成自己的任務,也可通過系統調用其他套用進行協同工作。在這種運行機制下,開發商場套用的用戶無需關心開發SNS套用時如何工作的,但他們之間又可通過系統本身進行協調,大大的降低了開發成本和溝通成本。普通的CMS(內容管理系統)一般不能完成所有的需求,而因為CMS在ThinkCMF內部只是已一個套用的形式存在,所以使用ThinkCMF你可以用CMS來管理你的內容,用電影網站系統來管理視頻,用電商系統來管理電商網站。這些程式不會影響,你可以模組化的增加或減少套用。
  4. tpflow
    tpflow基於thikphp 5.1 開發的符合快速設計理念的工作流組件。

線上手冊目錄

1簡介

ThinkPHP是一個免費開源的,快速、簡單的面向對象的輕量級PHP開發框架,引入了全新的CBD(核心+行為+驅動)架構模式,同時支持SAE、REST和Mongo

2入門基礎

2.1基礎概念
2.2獲取ThinkPHP
2.3關於版本
2.4環境要求
2.5許可協定

3架構設計

3.1系統特性
3.2目錄結構
3.3MVC分層
3.4執行流程
3.5命名規範
3.6入口檔案
3.7項目編譯
3.8URL訪問
3.9控制器
3.10模型
3.12視圖
3.14函式館
3.15類庫
3.16擴展

4構建套用

4.1開發流程
4.2入口檔案
4.3自動生成
4.4項目配置
4.5業務邏輯
4.6模板定義
4.7運行套用

5開發指南

5.1配置
5.2控制器
5.3模型
5.5錯誤和日誌
5.6調試
5.7快取
5.8安全
5.9部署
5.10雜項

6擴展指南

6.1類庫擴展
6.2套用擴展
6.3控制器擴展
6.4模型擴展
6.5驅動擴展
6.6Widget擴展
6.7行為擴展
6.8標籤庫擴展
6.9模板引擎擴展
6.10模式擴展

7模板指南

7.1變數輸出
7.2使用函式
7.3系統變數
7.4快捷輸出
7.5默認值輸出
7.6包含檔案
7.7導入檔案
7.9Foreach標籤
7.10Switch標籤
7.11比較標籤
7.12Range標籤
7.13Present標籤
7.14Empty標籤
7.15Defined標籤
7.16IF標籤
7.17標籤嵌套
7.18使用PHP代碼
7.19原樣輸出
7.20模板注釋
7.21引入標籤庫
7.22修改定界符

8附錄

8.1常量參考
8.2配置參考
8.3函式參考
8.4類庫參考
8.5關於升級
8.7開源套用
8.8典型案例
8.9大事記
8.10鳴謝

所獲榮譽

2012年度最受歡迎中國開源軟體第二名

相關詞條

熱門詞條

聯絡我們