ThinkPHP框架

thinkphp

  編輯
ThinkPHP是爲了簡化企業級應用開發和敏捷WEB應用開發而誕生的。最先誕生於2006年初,2007年元旦正式改名爲ThinkPHP,而且遵循Apache2 開源協議發佈。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。而且擁有衆多原創功能和特性,在社區團隊的積極參與下,在易用性、擴展性和性能方面不斷優化和改進。[1]  
ThinkPHP是一個快速、兼容並且簡單的輕量級國產PHP開發框架,誕生於2006年初,原名FCS,2007年元旦正式改名爲ThinkPHP,遵循Apache2開源協議發佈,從Struts結構移植過來並作了改進和完善,同時也借鑑了國外不少優秀的框架和模式,使用 面向對象的開發結構和MVC模式,融合了Struts的思想和TagLib( 標籤庫)、RoR的ORM 映射和ActiveRecord模式。
ThinkPHP能夠支持windows/ Unix/Linux等服務器環境,正式版須要 PHP5.0以上版本支持,支持MySql、 PgSQLSqlite多種數據庫以及PDO擴展,ThinkPHP框架自己沒有什麼特別模塊要求,具體的應用系統運行環境要求視開發所涉及的模塊。
做爲一個總體開發解決方案,ThinkPHP可以解決應用開發中的大多數須要,由於其自身包含了底層架構、兼容處理、 基類庫、數據庫訪問層、 模板引擎、緩存機制、 插件機制、角色認證、 表單處理等經常使用的組件,而且對於跨版本、跨平臺和跨數據庫移植都比較方便。而且每一個組件都是精心設計和完善的,應用開發過程僅僅須要關注您的業務邏輯。
 
外文名
ThinkPHP
定    義
一個開源輕量級 PHP框架
原    名
FCS
誕    生
於2006年初

發展歷史

編輯
ThinkPHP發展歷程,無數TPer一塊兒見證了ThinkPHP的成長:
2006年01月15日, ThinkPHP的雛形版本FCS0.6.0發佈;
2006年02月12日,(元宵節)發佈FCS 0.6.
1 版本, Google討論組成立;
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完整版[2]   ;
2015年12月11日,ThinkPHP 5.0 Beta 發佈;
2017年02月27日,Thinkphp5.0.5完整版正式發佈[3]   ;

特性

編輯

簡單易用

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

首創機制

ThinkTemplate是一個使用了XML 標籤庫技術的編譯型 模板引擎,支持兩種類型的模板標籤,使用了 動態編譯和緩存技術,並且支持自定義標籤庫。其特色包括:
1)支持XML標籤庫和普通標籤的混合定義;
2)編譯一次,下次直接運行而無需從新編譯;
3)模板文件更新後,自動更新模板緩存;
4)自動加載當前操做的模板緩存文件,無需指定模板文件名稱;
5)支持編碼轉換和 Content-Type更換;
THINKPHP目錄結構 THINKPHP目錄結構
6)模板變量輸出前綴支持,避免變量名稱衝突;
7)模板常量替換,無需設置模板變量;
8)支持變量組合調節器和格式化功能;
9)支持替換其它 模板引擎 插件使用;
10)支持獲取模板頁面內容。
內置 XML模板引擎,支持 標籤庫
富模型支持
1)聚合模型:
聚合模型是一種虛擬模型,用於把數據表的字段抽象化,更加容易理解和操做。
咱們能夠把數據表中的某些屬性進行 數據封裝,這樣就把枯燥的數據表字段賦予更好的可讀性。
2) 靜態模型
靜態模型可讓模型的數據靜態化,而不須要頻繁和數據庫打交道,能夠用於不常常改變的數據表。並且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[4]  
主要特性包括:
--------------------------------------------------------------
規範:遵循PSR-二、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後,重寫了模塊的自動生成,並支持控制器和模型的批量生成,增長了配置文件多格式支持,以及一些小的細節改進,該版本屬於小版本更新。
一、應用支持包括PHP/JSON/INI/XML/YAML以及自定義格式的配置文件;
二、支持模塊的自動生成和控制器/模型的批量生成;
三、增長插件控制器的訪問支持;
四、cookie函數增長httponly參數支持;
五、改進模型類的安全處理;
六、修正了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
[更新][5]  
獨立分組功能
模板繼承
模塊和操做映射
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 基於許多優秀的開源軟件開發,提供全方位的社交網絡(SNS)解決方案。ThinkSNS源於辦公圈項目,WEB端基於國內技術領先的ThinkPHP框架開發,另外還有IM客戶端軟件。ThinkSNS所有基於開源項目,同時也做爲開源項目,免費提供給用戶使用。項目框架都有完善的文檔和實例,很是適合二次開發。能爲致力於SNS方向的站長提供幫助,是咱們的最大的夢想![6]  
  2. OneThink
    OT是ThinkPHP官方發佈的內容管理框架;OneThink以其便捷的建站、豐富的擴展、靈活的二次開發,以及雲服務的支持,爲廣大我的和企業建站帶來新的契機和機遇,即將成爲互聯網新的弄潮兒。[7]  
  3. ThinkCMF是由第三方團隊開發的中文內容管理框架;ThinkCMF是一款基於PHP+MYSQL開發的中文內容管理框架。ThinkCMF提出靈活的應用機制,框架自身提供基礎的管理功能,而開發者能夠根據自身的需求以應用的形式進行擴展。每一個應用都能獨立的完成本身的任務,也可經過系統調用其餘應用進行協同工做。在這種運行機制下,開發商場應用的用戶無需關心開發SNS應用時如何工做的,但他們之間又可經過系統自己進行協調,大大的下降了開發成本和溝通成本。普通的CMS(內容管理系統)通常不能完成全部的需求,而由於CMS在ThinkCMF內部只是已一個應用的形式存在,因此使用ThinkCMF你能夠用CMS來管理你的內容,用電影網站系統來管理視頻,用電商系統來管理電商網站。這些程序不會影響,你能夠模塊化的增長或減小應用。[8]  

在線手冊目錄

編輯

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.4 視圖
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.8Vo list標籤
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年度最受歡迎中國開源軟件第二名[9]  
相關文章
相關標籤/搜索