簡介
ThinkPHP是一個免費開源的,快速、簡單的面向對象的輕量級PHP 開發框架,遵循 Apache2 開源協定發布,是為了簡化企業級套用開發和敏捷WEB套用開發而誕生的。借鑑了國外很多優秀的框架和模式,使用面向對象的開發結構和 MVC 模式,融合了 Struts 的 Action 思想和 JSP 的 TagLib(標籤庫)、 RoR 的ORM映射和 ActiveRecord 模式, 封裝了 CURD 和一些常用操作, 單一入口模式等,在模版引擎、快取機制、認證機制和擴展性方面均有獨特的表現。 目前版本1.0.4,官方網站:http://www.thinkphp.cn。ThinkPHP可以支持WIN/Unix伺服器環境, 正式版需要PHP5.0以上版本支持, 支持Mysql、 PgSQL、Sqlite 以及PDO 等多種資料庫,ThinkPHP 框架本身沒有什麼特別模組要求, 具體的套用系統運行環境要求視開發所涉及的模組。
使用 ThinkPHP,你可以更方便和快捷的開發和部署套用,當然不僅僅是企業級套用,任何 PHP套用開發都可以從 ThinkPHP 的簡單、兼容和快速的特性中受益。簡潔、快速和實用是 ThinkPHP 發展秉承的宗旨,為此 ThinkPHP 會不斷吸收和融入更好的技術以保證其新鮮和活力,提供 WEB 套用開發的最佳實踐!
ThinkPHP遵循 Apache2 開源許可協定發布,意味著你可以免費使用 ThinkPHP,甚至允許把你的ThinkPHP套用採用商業閉源發布。
發展歷史
ThinkPHP發展歷程,無數TPer一起見證了ThinkPHP的成長:
2006年01月15日,ThinkPHP的雛形版本FCS0.6.0發布;
2006年02月12日,(元霄節)發布FCS0.6.1版本,Google討論組成立;
2006年03月15日,FCS0.7.0版本發布;
2006年05月07日,FCS0.8版本發布;
2006年10月25日,FCS0.9.0版本發布;
2006年12月25日,SF項目和Google網站ThinkPHP項目申請完成;
2007年01月01日,FCS正式更名為ThinkPHP;
2007年01月08日,ThinkPHP0.9.5版發布同期官方網站開通;
2007年02月21日,TOPThink社區暨新版ThinkPHP官方網站開通,並提供社區支持;
2007年02月25日,發布ThinkPHP0.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正式版。
特性
1.簡單易用的MVC模式模型(M):模型的定義由Model類來完成。Model類位於項目目錄下面的LibModel目錄。
控制器(C):套用控制器(核心控制器)和Action控制器都承擔了控制器的角色,區別在於Action控制器完成業務過程,而套用控制器(App類)負責調度控制。Action控制器位於項目目錄下面的LibAction目錄。
視圖(V):模板的實現是和框架無關的,做到了100%分離,可以獨立預覽和製作。模板目錄位於項目目錄下面的Tpl目錄。
2.獨創的核心編譯和項目編譯機制
ThinkTemplate是一個使用了XML標籤庫技術的編譯型模板引擎,支持兩種類型的模板標籤,使用了動態編譯和快取技術,而且支持自定義標籤庫。其特點包括:
1)支持XML標籤庫和普通標籤的混合定義;
2)編譯一次,下次直接運行而無需重新編譯;
3)模板檔案更新後,自動更新模板快取;
4)自動載入當前操作的模板快取檔案,無需指定模板檔案名稱稱;
5)支持編碼轉換和Content-Type 更換;
6)模板變數輸出前綴支持,避免變數名稱衝突;
7)模板常量替換,無需設定模板變數;
8)支持變數組合調節器和格式化功能;
9)支持替換其它模板引擎外掛程式使用;
10)支持獲取模板頁面內容
3.內置 XML模板引擎,支持標籤庫
4.富模型支持
1)聚合模型:
聚合模型是一種虛擬模型,用於把數據表的欄位抽象話,更加容易理解和操作。
我們可以把數據表中的某些屬性進行數據封裝,這樣就把枯燥的數據表欄位賦予更好的可讀性。
2)靜態模型:
靜態模型可以讓模型的數據靜態化,而不需要頻繁和資料庫打交道,可以用於不經常不變的數據表。而且ThinkPHP在ORM層上面模擬實現了資料庫的視圖功能,這是ThinkPHP獨創的一項技術,使得多表的關聯查詢具有更高的效率和可操作性,而無需定義複雜的關聯關係,讓關聯關係更加淺顯易懂。
有些時候,數據表的數據一旦添加後就不再容易變化,我們更希望把這樣的模型數據靜態化,而不需要再次訪問資料庫。ThinkPHP支持靜態模型的概念,一旦把模型設定為靜態,那么會在第一次初始化的時候獲取數據表的全部數據,並生成快取,以後不會再連線資料庫。而只需要直接訪問模型的dataList數據即可。
3)視圖模型
ThinkPHP在ORM模型裡面模擬實現了資料庫的視圖模型,該功能可以用於多表查詢。
要定義視圖對象,需要設定viewModel為true,然後設定viewFields屬性即可。
5.CURD和操作高度自動化支持
ThinkPHP提供了靈活和方便的數據操作方法,不僅實現了對資料庫操作的四大基本操作(CURD):創建、讀取、更新和刪除的實現,還內置了很多實用的數據操作方法,提供了ActiveRecords模式的最佳體驗。
6.豐富的查詢語言支持
ThinkPHP大多數情況使用的都是對象查詢,因為充分利用了ORM查詢語言,了解查詢條件的定義對使用對象查詢非常有幫助,對於複雜的查詢,或者從安全方面考慮,可以使用HashMap對象或者索引數組來傳遞查詢條件。
7.目錄結構自動創建
ThinkPHP具有項目目錄自動創建功能,你只需要定義好項目的入口檔案,第一次執行入口檔案的時候,系統會自動創建項目的相關目錄結構,如果是linux環境下面需要給項目入口檔案裡面指定的路徑設定可寫許可權。
8.分散式資料庫支持
ThinkPHP的模型支持主從式資料庫的連線,配置DB_DEPLOY_TYPE 為1 可以採用分散式資料庫支持。
9.多資料庫連線和切換支持
如果需要在特殊的時候連線多個資料庫,那么可以嘗試使用ThinkPHP的多資料庫連線特性:包括相同類型的資料庫和不同類型的資料庫。(注意:所謂的相同類型資料庫的定義是指和項目配置檔案或者模型的資料庫連線的資料庫類型相同。)
10.ActiveRecords模式和豐富的ROR特性
ThinkPHP實現了ActiveRecords模式的ORM模型,採用了非標準的ORM模型:表映射到類,記錄(集)映射到對象,欄位屬性映射到對象的虛擬屬性。最大的特點就是使用方便,從而達到敏捷開發的目的。
11.靈活簡單的項目配置
ThinkPHP提供了靈活的配置功能,採用最有效率的PHP返回數組方式定義,支持慣例配置、項目配置、調試配置和模組配置,並且會自動生成配置快取檔案,無需重複解析的開銷。對於有些簡單的套用,你無需配置任何配置檔案,而對於複雜的要求,你還可以增加模組配置檔案,另外ThinkPHP的動態配置使得你在開發過程中可以靈活的調整配置參數。
ThinkPHP在項目配置上面創造了自己獨有的分層配置模式,其配置層次體現在:慣例配置--> 項目配置--> 模組配置--> 操作(動態)配置,優先順序從右到左(在沒有生效的前提下)。
12.模型自動驗證和處理
系統內置了數據對象的自動驗證功能,而大多數情況下面,數據對象是由表單提交的$_POST數據創建。需要使用系統的自動驗證功能,只需要在Model類裡面定義$_validate屬性,是由多個驗證因子組成的數組,支持的驗證因子格式:驗證欄位,驗證規則,錯誤提示,驗證條件,附加規則,驗證時間。
13.靜態頁面生成和多元化快取機制
ThinkPHP內置了靜態快取的功能,並且支持靜態快取的規則定義。要使用靜態快取功能,需要開啟HTML_CACHE_ON 參數,並且在項目配置目錄下面增加靜態快取規則檔案 htmls.php。
14.豐富的資料庫及PDO支持
15.SEO和URL路由支持
16.AJAX支持
17.易擴展的系統基類庫
系統基類庫
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內建的類庫和檔案導入方法,提供了方便和靈活的類似於命名空間的檔案導入機制。
18.自動編碼轉換
ThinkPHP框架的檔案全部採用UTF-8編碼格式,UTF-8的支持和自動輸出編碼轉換的功能讓頁面表現更加靈活。您可以配置輸出的頁面編碼格式,如gb2312等(默認採用UTF-8輸出)。系統根據配置檔案中設定的編碼格式自動對頁面進行編碼轉換,支持iconv和mb_string兩種方式,為了提高效率,如果系統的模板編碼設定和輸出編碼設定項相同,則不會進行編碼轉換。ThinkPHP可以設定模板編碼、輸出編碼和資料庫編碼,並自動完成轉換工作,讓你的套用不再受編碼的苦惱。
19.組件和外掛程式支持
20.基於角色的許可權控制體系
企業級的套用是離不開安全保護的,ThinkPHP以基於Spring的Acegi安全系統作為參考原型,並做了簡化,以適合目前的ThinkPHP結構,提供了一個多層的、可定製的安全體系來為套用開發提供安全控制。安全體系中主要有: 安全攔截器、認證管理器、決策訪問管理器 、運行身份管理器。
21.詳盡的開發指南和全中文注釋
重要的概念
要掌握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以基於Spring的Acegi安全系統作為參考原型,並做了簡化,以適合目前的ThinkPHP結構,提供了一個多層的、可定製的安全體系來為套用開發提供安全控制。安全體系中主要有:安全攔截器、認證管理器、決策訪問管理器、運行身份管理器。
更新記錄
[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、Cookie和Session類庫的依賴
去掉了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認證增加了操作的認證設定,之前只支持模組的認證設定
分層架構
ThinkPHP的分層架構採用三層架構模式:
表現層
包含模板視圖、用戶界面、JS、Flash等通過模板引擎的支持,可以使用標籤定義簡化表現層的定義工作。
業務層
包含業務接口層、業務邏輯層、實體層、數據訪問層Action控制器作為業務接口層,提供系統各種業務操作的入口。因此,不提倡在控制器類中寫過多的業務邏輯代碼,雖然說很難嚴格控制。具體的業務邏輯應該封裝到數據訪問對象(Dao)類中實現,如果覺得過於複雜,還可以把子業務在Helper類中包裝後統一調用。業務處理過程一般會構造出業務實體對象(如Vo對象),對業務實體對象的存取通過數據訪問層完成。數據訪問層把實體對象和資料庫數據之間建立映射關係,並且封裝了通用的數據操作。
數據層
目前支持的資料庫有MySql、MsSql、PgSql、Oracle、Sqlite,最新版本已經提供PDO的支持,資料庫的選用和業務邏輯沒有關係。
更新記錄
TinkPHP3.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
[更新][2]
獨立分組功能
模板繼承
模組和操作映射
AJAX增加jsonp格式支持
分組支持單獨配置默認模組和操作
核心編譯過程的最佳化
SAE引擎升級
改進的分頁類
修正查詢語言的一處安全隱患
ThinkPHP3.1發布2012/09/03
[更新]
更加安全的防護和過濾體系
MVC多層支持
Action參數綁定支持
模型命名範圍支持
查詢條件和SQL預處理功能
動態設定自動驗證和自動完成支持
更加靈活強大的快取管理方法
日誌記錄簡化、增加IP支持
致命錯誤的捕獲機制完善
頁面Trace機制改進和分類顯示支持
超過128項更新
ThinkPHP3.0.1開發版
2012-04-05
[更新]
Action參數綁定支持
模型類命名範圍支持
全局系統變數安全過濾支持
增加IS_GETIS_POSTIS_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標籤
增加數據查詢的ISNULL和ISNOTNULL支持
修正連貫操作的一些警告錯誤
完善join分析支持leftright等方式
修正模板引擎在開啟短標籤的情況下無法正常輸出xml標識的問題
修正ORG.Date.Date類的maxDayOfMonth方法
完善多資料庫連線的切換
修改命令行自動創建工具build
修正連貫操作的field方法的判斷錯誤
修正Db類的一處where條件判斷的小問題
rand_string加上中文隨機字元串生成
修正兼容方法json_encode對布爾值的判斷
修正ArrayList類的addall方法
修正maxminavgsum等查詢方法返回浮點型數據錯誤的問題
修正數組方式查詢的自己使用Like問題
iterate標籤增加mod屬性,用於計算循環變數的取模替換原來的odd屬性
增加Input類,用於輸入數據管理
刪除已經廢棄的目錄檢查外掛程式
最佳化模板引擎解析,避免多次實例化模板解析類並簡化模板解析類的寫法,去掉架構方法定義
修改mobile驗證的正則
增加了分頁類關於負數的判斷
部分CX標籤的屬性可以支持特殊模板變數
F方法生成的檔案會自動加上THINK_PATH判斷,避免直接執行
取消了當指定模組和操作不存在的時候執行默認模組和默認操作,由用戶自己定義空模組和空操作來處理。
增加了連貫操作的data方法,用於指定要操作的數據
去掉了已經廢棄的三個配置參數:DB_CACHE_ONDB_CACHE_TIMEDB_CACHE_MAX
增加表單提交的MAGIC_QUOTES_GPC判斷
model類的query和execute方法支持使用__TABLE__字元串系統會自動替換成當前模型對應的表名
調整了空操作和直接判斷模板檔案的順序空操作優先執行
修正Cookie類支持關閉瀏覽器就失效的情況設定COOKIE_EXPIRE為0或者空字元串或者在使用的時候傳遞參數0Cookie::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_NAMEAPP_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條件表達式不支持where1的情況
Db類增加getLastSql方法用於獲取最後一次查詢的sql語句
完善Log類的操作以及最佳化錯誤日誌的寫入
修正model的資料庫連線配置讀取
在ajax返回之前保存日誌記錄
完善compare標籤
改進Vendor函式的baseUrl參數定義
改進項目語言包的定義不同語言分成不同子目錄
簡化了query方法的資料庫快取
增加clearCache方法,用於清空項目相關快取目錄
增加firebird資料庫驅動支持
修正pgsql驅動
修正app.php檔案的編譯快取路徑的問題
增加編譯快取路徑的設定RUNTIME_PATH
[1.0.0]2007-12-25
最佳化了執行效率和記憶體開銷
Import方法增加同名檢測和類檢測
完善PHP5.2.0以下版本的支持
去掉了核心對Config、Language、Cookie和Session類庫的依賴
去掉了Action類內置的默認操作
改進了MySqli的驅動類庫
修正了主鍵不是自動增長的時候Model的add方法返回錯誤
修正了mysqli的escape_string方法
修正了PDO的連線params參數問題
修正了Model的findAll的關聯查詢問題
修正了Model類的getModelName方法問題
修正了RBAC的模組大小寫設定
去掉volistresultset標籤,均作為iterate標籤的別名
增加了項目編譯機制和核心類庫編譯機制
標籤庫定義增加標籤的別名定義
XML模版結束標籤增加對空格的支持
增加compare標籤和eqneqgtegtlteltheq和nheq標籤別名
增加了多模版和多語言的開關
RBAC認證增加了操作的認證設定,之前只支持模組的認證設定
線上手冊目錄
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.11資料庫抽象層
3.12視圖
3.13模板引擎
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.8Volist標籤
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.6代碼重構
8.7開源套用
8.8典型案例
8.9大事記
8.10鳴謝
所獲榮譽
2012年度最受歡迎中國開源軟體第二名