thinkphp-PHP開源框架介紹
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
ThinkPHP,是為了簡化企業(yè)級應(yīng)用開發(fā)和敏捷WEB應(yīng)用開發(fā)而誕生的開源輕量級PHP框架。
ThinkPHP是一個快速、兼容而且簡單的輕量級國產(chǎn)PHP開發(fā)框架,誕生于2006年初,原名FCS,2007年元旦正式更名為ThinkPHP,遵循Apache2開源協(xié)議發(fā)布,從Struts結(jié)構(gòu)移植過來并做了改進(jìn)和完善,同時也借鑒了國外很多優(yōu)秀的框架和模式,使用面向?qū)ο蟮拈_發(fā)結(jié)構(gòu)和MVC模式,融合了Struts的思想和TagLib(標(biāo)簽庫)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可以支持windows/Unix/Linux等服務(wù)器環(huán)境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多種數(shù)據(jù)庫以及PDO擴展,ThinkPHP框架本身沒有什么特別模塊要求,具體的應(yīng)用系統(tǒng)運行環(huán)境要求視開發(fā)所涉及的模塊。
最早誕生于2006年初,2007年元旦正式更名為ThinkPHP,并且遵循Apache2開源協(xié)議發(fā)布。ThinkPHP從誕生以來一直秉承簡潔實用的設(shè)計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。并且擁有眾多原創(chuàng)功能和特性,在社區(qū)團隊的積極參與下,在易用性、擴展性和性能方面不斷優(yōu)化和改進(jìn)。 [1] 作為一個整體開發(fā)解決方案,ThinkPHP能夠解決應(yīng)用開發(fā)中的大多數(shù)需要,因為其自身包含了底層架構(gòu)、兼容處理、基類庫、數(shù)據(jù)庫訪問層、模板引擎、緩存機制、插件機制、角色認(rèn)證、表單處理等常用的組件,并且對于跨版本、跨平臺和跨數(shù)據(jù)庫移植都比較方便。并且每個組件都是精心設(shè)計和完善的,應(yīng)用開發(fā)過程僅僅需要關(guān)注業(yè)務(wù)邏輯。 ThinkPHP發(fā)展歷程,無數(shù)TPer一起見證了ThinkPHP的成長:
2006年01月15日, ThinkPHP的雛形版本FCS0.6.0發(fā)布;
2006年02月12日,(元宵節(jié))發(fā)布FCS 0.6.1 版本,Google討論組成立;
2006年03月15日, FCS 0.7.0版本發(fā)布;
2006年05月07日, FCS 0.8版本發(fā)布;
2006年10月25日, FCS 0.9.0版本發(fā)布;
2006年12月25 日,SF項目和Google網(wǎng)站ThinkPHP項目申請完成;
2007年01月01日, FCS正式更名為ThinkPHP;
2007年01月08日, ThinkPHP 0.9.5版發(fā)布同期官方網(wǎng)站開通;
2007年02月21日, TOPThink社區(qū)暨新版ThinkPHP官方網(wǎng)站開通,并提供社區(qū)支持;
2007年02月25日, 發(fā)布ThinkPHP 0.9.6版本,完成FCS到ThinkPHP的正式遷移;
2007年04月29日, ThinkPHP發(fā)布0.9.7版本;
2007年07月01日, ThinkPHP發(fā)布0.9.8版本;
2007年10月15 日,ThinkPHP發(fā)布1.0.0RC1版本,完成PHP5的重構(gòu);
2007年12月15 日,ThinkPHP發(fā)布1.0.0正式版本標(biāo)志著ThinkPHP步入軌道;
2008年10月01日, ThinkPHP發(fā)布1.0.3正式版本;
2008年12月25 日,ThinkPHP發(fā)布1.5正式版本并啟動商業(yè)化支持服務(wù),ThinkPHP進(jìn)入穩(wěn)定發(fā)展;
2009年05月01日, ThinkPHP 發(fā)布1.6.0RC1版本;
2009年10月01日, ThinkPHP發(fā)布2.0版本完成新的重構(gòu)和飛躍,這是一次劃時代的版本;
2012年04月05日, ThinkPHP發(fā)布3.0版本 慶祝ThinkPHP發(fā)布6周年;
2012年10月08日, ThinkPHP發(fā)布3.1版本;
2012年11月11日, ThinkPHP3.1.2擴展包;
2013年05月09日,ThinkPHP發(fā)布3.1.3完整版;
2013年12月18日,ThinkPHP發(fā)布3.2正式版;
2014年10月31日,ThinkPHP發(fā)布3.2.2完整版 [2];
2015年12月11日,ThinkPHP 5.0 Beta 發(fā)布;
2017年02月27日,Thinkphp5.0.5完整版正式發(fā)布 [3];
2018年05月02日,Thinkphp5.1.0RC版本發(fā)布; [4]
2019年04月22日,Thinkphp6.0RC2版本發(fā)布 [5];
2019年08月16日,Thinkphp6.0RC4版本發(fā)布 [6];
2019年12月24日,Thinkphp6.0.1版本發(fā)布 [7];
模型(M):模型的定義由Model類來完成。Model類位于項目目錄下面的LibModel目錄。
控制器(C):應(yīng)用控制器(核心控制器)和Action控制器都承擔(dān)了控制器的角色,區(qū)別在于Action控制器完成業(yè)務(wù)過程,而應(yīng)用控制器(App類)負(fù)責(zé)調(diào)度控制。Action控制器位于項目目錄下面的LibAction目錄。 視圖(V):模板的實現(xiàn)是和框架無關(guān)的,做到了100%分離,可以獨立預(yù)覽和制作。模板目錄位于項目目錄下面的Tpl目錄。 ![]() ThinkTemplate是一個使用了XML標(biāo)簽庫技術(shù)的編譯型模板引擎,支持兩種類型的模板標(biāo)簽,使用了動態(tài)編譯和緩存技術(shù),而且支持自定義標(biāo)簽庫。其特點包括:
1)支持XML標(biāo)簽庫和普通標(biāo)簽的混合定義;
2)編譯一次,下次直接運行而無需重新編譯;
3)模板文件更新后,自動更新模板緩存;
4)自動加載當(dāng)前操作的模板緩存文件,無需指定模板文件名稱;
5)支持編碼轉(zhuǎn)換和Content-Type更換;
6)模板變量輸出前綴支持,避免變量名稱沖突; 7)模板常量替換,無需設(shè)置模板變量;
8)支持變量組合調(diào)節(jié)器和格式化功能;
9)支持替換其它模板引擎插件使用;
10)支持獲取模板頁面內(nèi)容。
內(nèi)置XML模板引擎,支持標(biāo)簽庫
富模型支持
1)聚合模型:
聚合模型是一種虛擬模型,用于把數(shù)據(jù)表的字段抽象化,更加容易理解和操作。
可以把數(shù)據(jù)表中的某些屬性進(jìn)行數(shù)據(jù)封裝,這樣就把枯燥的數(shù)據(jù)表字段賦予更好的可讀性。
2)靜態(tài)模型:
靜態(tài)模型可以讓模型的數(shù)據(jù)靜態(tài)化,而不需要頻繁和數(shù)據(jù)庫打交道,可以用于不經(jīng)常改變的數(shù)據(jù)表。而且ThinkPHP在ORM層上面模擬實現(xiàn)了數(shù)據(jù)庫的視圖功能,這是ThinkPHP獨創(chuàng)的一項技術(shù),使得多表的關(guān)聯(lián)查詢具有更高的效率和可操作性,而無需定義復(fù)雜的關(guān)聯(lián)關(guān)系,讓關(guān)聯(lián)關(guān)系更加淺顯易懂。
有些時候,數(shù)據(jù)表的數(shù)據(jù)一旦添加后就不再容易變化,把這樣的模型數(shù)據(jù)靜態(tài)化,而不需要再次訪問數(shù)據(jù)庫。ThinkPHP支持靜態(tài)模型的概念,一旦把模型設(shè)置為靜態(tài),那么會在第一次初始化的時候獲取數(shù)據(jù)表的全部數(shù)據(jù),并生成緩存,以后不會再連接數(shù)據(jù)庫。而只需要直接訪問模型的dataList數(shù)據(jù)即可。
3)視圖模型
ThinkPHP在ORM模型里面模擬實現(xiàn)了數(shù)據(jù)庫的視圖模型,該功能可以用于多表查詢。
要定義視圖對象,需要設(shè)置viewModel為true,然后設(shè)置viewFields屬性即可。
CURD和操作高度自動化支持
ThinkPHP提供了靈活和方便的數(shù)據(jù)操作方法,不僅實現(xiàn)了對數(shù)據(jù)庫操作的四大基本操作(CURD):創(chuàng)建、讀取、更新和刪除的實現(xiàn),還內(nèi)置了很多實用的數(shù)據(jù)操作方法,提供了ActiveRecords模式的最佳體驗。
豐富的查詢語言支持
ThinkPHP大多數(shù)情況使用的都是對象查詢,因為充分利用了ORM查詢語言,了解查詢條件的定義對使用對象查詢非常有幫助,對于復(fù)雜的查詢,或者從安全方面考慮,可以使用HashMap對象或者索引數(shù)組來傳遞查詢條件。
目錄結(jié)構(gòu)自動創(chuàng)建THINKPHP目錄結(jié)構(gòu)
ThinkPHP具有項目目錄自動創(chuàng)建功能,需要定義好項目的入口文件,第一次執(zhí)行入口文件的時候,系統(tǒng)會自動創(chuàng)建項目的相關(guān)目錄結(jié)構(gòu),如果是linux環(huán)境下面需要給項目入口文件里面指定的路徑設(shè)置可寫權(quán)限。
分布式數(shù)據(jù)庫支持
ThinkPHP的模型支持主從式數(shù)據(jù)庫的連接,配置DB_DEPLOY_TYPE為1可以采用分布式數(shù)據(jù)庫支持。
多數(shù)據(jù)庫連接和切換支持
如果需要在特殊的時候連接多個數(shù)據(jù)庫,那么可以嘗試使用ThinkPHP的多數(shù)據(jù)庫連接特性:包括相同類型的數(shù)據(jù)庫和不同類型的數(shù)據(jù)庫。(注意:所謂的相同類型數(shù)據(jù)庫的定義是指和項目配置文件或者模型的數(shù)據(jù)庫連接的數(shù)據(jù)庫類型相同。)
ActiveRecords模式和豐富的ROR特性
ThinkPHP實現(xiàn)了ActiveRecords模式的ORM模型,采用了非標(biāo)準(zhǔn)的ORM模型:表映射到類,記錄(集)映射到對象,字段屬性映射到對象的虛擬屬性。最大的特點就是使用方便,從而達(dá)到敏捷開發(fā)的目的。
靈活簡單的項目配置
ThinkPHP提供了靈活的配置功能,采用最有效率的PHP返回數(shù)組方式定義,支持慣例配置、項目配置、調(diào)試配置和模塊配置,并且會自動生成配置緩存文件,無需重復(fù)解析的開銷。對于有些簡單的應(yīng)用,無需配置任何配置文件,而對于復(fù)雜的要求,可以增加模塊配置文件,另外ThinkPHP的動態(tài)配置使得在開發(fā)過程中可以靈活的調(diào)整配置參數(shù)。
ThinkPHP在項目配置上面創(chuàng)造了自己獨有的分層配置模式,其配置層次體現(xiàn)在:慣例配置-->項目配置-->模塊配置-->操作(動態(tài))配置,優(yōu)先順序從右到左(在沒有生效的前提下)。
模型自動驗證和處理
系統(tǒng)內(nèi)置了數(shù)據(jù)對象的自動驗證功能,而大多數(shù)情況下面,數(shù)據(jù)對象是由表單提交的$_POST數(shù)據(jù)創(chuàng)建。需要使用系統(tǒng)的自動驗證功能,只需要在Model類里面定義$_validate屬性,是由多個驗證因子組成的數(shù)組,支持的驗證因子格式:驗證字段,驗證規(guī)則,錯誤提示,驗證條件,附加規(guī)則,驗證時間。
靜態(tài)頁面生成和多元化緩存機制
ThinkPHP內(nèi)置了靜態(tài)緩存的功能,并且支持靜態(tài)緩存的規(guī)則定義。要使用靜態(tài)緩存功能,需要開啟HTML_CACHE_ON參數(shù),并且在項目配置目錄下面增加靜態(tài)緩存規(guī)則文件htmls.php。
豐富的數(shù)據(jù)庫及PDO支持
SEO和URL路由支持
AJAX支持
易擴展的系統(tǒng)基類庫
系統(tǒng)基類庫
ThinkPHP框架通過基類庫的概念把所有系統(tǒng)類庫都集成在一起,包括ThinkPHP的核心類庫。
基類庫分成Think核心類庫、ORG擴展類庫,在這主要介紹的是核心基類庫,核心基類庫的作用是完成框架的通用性開發(fā)而必須的基礎(chǔ)類和常用工具類等,包含有:
Think.Core 核心類庫包
Think.Db 數(shù)據(jù)庫類庫包
Think.Util 系統(tǒng)工具類庫包
Think.Template 內(nèi)置模板引擎類庫包
Think.Exception 異常處理類庫包函數(shù)庫
ThinkPHP內(nèi)置了一個系統(tǒng)公共函數(shù)庫,提供了一些系統(tǒng)需要的函數(shù),系統(tǒng)函數(shù)庫位于ThinkPHP的Common目錄下面,名稱為functions.php。
每個項目可以定義自己的函數(shù)庫,位于項目的Common目錄下面的common.php文件。
如果項目在Common目錄下面有定義自己的common.php文件,框架會在初始化的時候自動導(dǎo)入,而無需自己導(dǎo)入。
匹配導(dǎo)入
Import方法是ThinkPHP內(nèi)建的類庫和文件導(dǎo)入方法,提供了方便和靈活的類似于命名空間的文件導(dǎo)入機制。
自動編碼轉(zhuǎn)換
ThinkPHP框架的文件全部采用UTF-8編碼格式,UTF-8的支持和自動輸出編碼轉(zhuǎn)換的功能讓頁面表現(xiàn)更加靈活??梢耘渲幂敵龅捻撁婢幋a格式,如gb2312等(默認(rèn)采用UTF-8輸出)。系統(tǒng)根據(jù)配置文件中設(shè)置的編碼格式自動對頁面進(jìn)行編碼轉(zhuǎn)換,支持iconv和mb_string兩種方式,為了提高效率,如果系統(tǒng)的模板編碼設(shè)置和輸出編碼設(shè)置項相同,則不會進(jìn)行編碼轉(zhuǎn)換。ThinkPHP可以設(shè)置模板編碼、輸出編碼和數(shù)據(jù)庫編碼,并自動完成轉(zhuǎn)換工作,應(yīng)用不再受編碼的苦惱。
要掌握ThinkPHP,首先要了解其中的幾個重要概念,對于熟悉Java開發(fā)的朋友,應(yīng)該很容易理解下面的一些概念。
Action對象
和Struts框架的Action類似,Action對象主要提供應(yīng)用邏輯的控制和處理,屬于ThinkPHP的控制層,由核心的App類完成模塊和操作的解析后直接轉(zhuǎn)交給相應(yīng)的Action對象處理。應(yīng)用類中的所有Action對象都繼承系統(tǒng)的Action基類。
Dao對象
是指DataAccessObject(數(shù)據(jù)訪問對象),Dao設(shè)計模式把底層的數(shù)據(jù)訪問邏輯和業(yè)務(wù)邏輯分開,夾在業(yè)務(wù)層與數(shù)據(jù)層中間,用于數(shù)據(jù)庫訪問和操作。可以針對單表和多表操作。ThinkPHP中的Dao對象屬于建立在抽象數(shù)據(jù)庫訪問層之上的事務(wù)性對象。
VO對象
是指ValueObject(數(shù)據(jù)對象),更加精確的說是業(yè)務(wù)對象,因為VO對象是存活在業(yè)務(wù)層的,供業(yè)務(wù)邏輯使用的。VO對象和數(shù)據(jù)表存在一種映射關(guān)系,VO對象的每個屬性對應(yīng)數(shù)據(jù)表(或者視圖)的一個字段,可以添加其他非數(shù)據(jù)表字段的VO對象屬性,以用于業(yè)務(wù)邏輯操作,例如關(guān)聯(lián)字段。VO對象有個特殊的保留屬性_info,是一個數(shù)組變量,用來保存該VO對象的一些特殊信息。和VO對象對應(yīng)的概念還有PO(持久數(shù)據(jù)對象),VO和PO的概念都來自于O/RMapping(ObjectRelationalMapping,對象關(guān)系映射),PO只能用在數(shù)據(jù)層(也就是說PO對象的屬性必須和數(shù)據(jù)表一一對應(yīng)),VO用在業(yè)務(wù)邏輯層和表示層(可以有自己的額外屬性)。各層操作屬于該層自己的數(shù)據(jù)對象,這樣就可以降低各層之間的耦合,便于以后系統(tǒng)的維護和擴展。如果將PO用在各個層中就相當(dāng)于使用全局變量,在OO設(shè)計非常不贊成使用全局變量。
VoList對象
在ThinkPHP框架中,把查詢后的數(shù)據(jù)集(ResultSet)轉(zhuǎn)換成數(shù)據(jù)列表對象,也就是VOLIST對象,和ResultSet對象不同的是每個記錄就相當(dāng)于一個VO對象。在VOLIST對象中可以方便地遍歷和操作VO對象。VO對象和VOLIST對象都屬于ThinkPHP框架中的實體對象,是數(shù)據(jù)操作的基本元素。在開發(fā)過程中沒有使用Dao模式,而是通過數(shù)據(jù)庫驅(qū)動類直接操作數(shù)據(jù)庫,那么返回的是ResultSet對象。ThinkPHP系統(tǒng)提供了從ResultSet對象轉(zhuǎn)換為VOLIST對象的方法。
組件和插件
企業(yè)級的應(yīng)用是離不開安全保護的,ThinkPHP以基于Spring的Acegi安全系統(tǒng)作為參考原型,并做了簡化,以適合ThinkPHP結(jié)構(gòu),提供了一個多層的、可定制的安全體系來為應(yīng)用開發(fā)提供安全控制。安全體系中主要有: 安全攔截器、認(rèn)證管理器、決策訪問管理器 、運行身份管理器。
ThinkPHP的分層架構(gòu)采用三層架構(gòu)模式:
包含模板視圖、用戶界面、JS、Flash等通過模板引擎的支持,可以使用標(biāo)簽定義簡化表現(xiàn)層的定義工作。
包含業(yè)務(wù)接口層、業(yè)務(wù)邏輯層、實體層、數(shù)據(jù)訪問層Action控制器作為業(yè)務(wù)接口層,提供系統(tǒng)各種業(yè)務(wù)操作的入口。因此,不提倡在控制器類中寫過多的業(yè)務(wù)邏輯代碼,雖然說很難嚴(yán)格控制。具體的業(yè)務(wù)邏輯應(yīng)該封裝到數(shù)據(jù)訪問對象(Dao)類中實現(xiàn),如果覺得過于復(fù)雜,還可以把子業(yè)務(wù)在Helper類中包裝后統(tǒng)一調(diào)用。業(yè)務(wù)處理過程一般會構(gòu)造出業(yè)務(wù)實體對象(如Vo對象),對業(yè)務(wù)實體對象的存取通過數(shù)據(jù)訪問層完成。數(shù)據(jù)訪問層把實體對象和數(shù)據(jù)庫數(shù)據(jù)之間建立映射關(guān)系,并且封裝了通用的數(shù)據(jù)操作。
支持的數(shù)據(jù)庫有MySql、MsSql、PgSql、Oracle、Sqlite,最新版本已經(jīng)提供PDO的支持,數(shù)據(jù)庫的選用和業(yè)務(wù)邏輯沒有關(guān)系。
ThinkPHP 5.0正式版發(fā)布 2016/09/15 [8]
主要特性包括:
--------------------------------------------------------------
規(guī)范:遵循PSR-2、PSR-4規(guī)范,Composer及單元測試支持;
嚴(yán)謹(jǐn):異常嚴(yán)謹(jǐn)?shù)腻e誤檢測和安全機制,詳細(xì)的日志信息,為開發(fā)保駕護航;
靈活:減少核心依賴,擴展更靈活、方便,支持命令行指令擴展;
API友好:出色的性能和REST支持、遠(yuǎn)程調(diào)試,更好的支持API開發(fā);
高效:惰性加載,及路由、配置和自動加載的緩存機制;
ORM:重構(gòu)的數(shù)據(jù)庫、模型及關(guān)聯(lián),MongoDb支持;
--------------------------------------------------------------
相對于RC4版本,主要更新如下: 請求和路由:
數(shù)據(jù)庫:
模型:
日志和緩存:
其他:
調(diào)整:
TinkPHP 3.2.2發(fā)布 2014/4/15 ThinkPHP3.2.2版本在修正一些BUG后,重寫了模塊的自動生成,并支持控制器和模型的批量生成,增加了配置文件多格式支持,以及一些小的細(xì)節(jié)改進(jìn),該版本屬于小版本更新。
1、應(yīng)用支持包括PHP/JSON/INI/XML/YAML以及自定義格式的配置文件;
2、支持模塊的自動生成和控制器/模型的批量生成;
3、增加插件控制器的訪問支持;
4、cookie函數(shù)增加httponly參數(shù)支持;
5、改進(jìn)模型類的安全處理;
6⑿拚�3.2.1發(fā)布以來社區(qū)反饋的一些BUG(詳見更新日志); TinkPHP3.2.1發(fā)布 2014/2/14 相對于3.2.0版本,主要更新如下:
TinkPHP3.2發(fā)布 2013/12/18 這次版本的關(guān)鍵詞是模塊化、驅(qū)動化和云平臺。
模塊化:3.2版本的架構(gòu)專門為模塊化設(shè)計做了優(yōu)化和調(diào)整,從而更適合企業(yè)級應(yīng)用,當(dāng)然這很大一部分得益于對命名空間的支持以及自動加載機制。同時,會看到一個小的細(xì)節(jié),ThinkPHP3.2版本自帶了一個應(yīng)用入口文件和應(yīng)用目錄。
驅(qū)動化:3.2版本在設(shè)計類庫的時候盡量采用驅(qū)動式設(shè)計,對于同一功能在不同環(huán)境和類型的操作只需要配置驅(qū)動即可輕松移植,不需要改變現(xiàn)有代碼,同時也讓應(yīng)用能夠適用于更多更復(fù)雜的運行環(huán)境。
云平臺:3.2版本在底層核心就包含了對各種云平臺的支持,通過定制不同的應(yīng)用(場景)模式以及對應(yīng)的驅(qū)動就可以輕松支持云平臺的部署開發(fā),可以實現(xiàn)在本地開發(fā),然后直接無縫部署到云平臺,已經(jīng)支持的包括SAE和BAE3。
功能:
3.2版本在此前的3.1.3版本之上,引入了命名空間,強化了驅(qū)動化和行為,增強了模塊化的概念和對云平臺的支持,并改進(jìn)了諸多的細(xì)節(jié)。 主要改進(jìn)包括:
注意:3.2以上版本對PHP的版本要求為PHP5.3+ (不包含PHP5.3dev和PHP6) TinkPHP3.1.3發(fā)布 2013/05/09 更新
該版本針對3.1.2進(jìn)行了一些改進(jìn)和完善,主要包括:
改進(jìn)異常處理,支持致命錯誤捕獲;
針對PDO驅(qū)動和Sqlsrv驅(qū)動的完善,支持參數(shù)綁定;
增加變量安全獲取和過濾的快捷方法I;
分組支持部署到完整域名或IP;
A和D方法支持跨分組調(diào)用;
改進(jìn)模版引擎的定界符對特殊字符的支持;
修正JS代碼可能對模版標(biāo)簽的混淆;
模型的where方法支持多次調(diào)用;
默認(rèn)關(guān)閉頁面壓縮輸出;
異常日志的紀(jì)錄;
Action類的assign方法支持連貫操作;
數(shù)據(jù)庫錯誤信息包含錯誤代碼;
修正上一版本的一些BUG; TinkPHP3.1.2發(fā)布 2012/11/17 [更新] [9]
獨立分組功能
模板繼承
模塊和操作映射
AJAX增加jsonp格式支持
分組支持單獨配置默認(rèn)模塊和操作
核心編譯過程的優(yōu)化
SAE引擎升級
改進(jìn)的分頁類
修正查詢語言的一處安全隱患 ThinkPHP 3.1發(fā)布 2012/09/03 [更新]
更加安全的防護和過濾體系
MVC多層支持
Action參數(shù)綁定支持
模型命名范圍支持
查詢條件和SQL預(yù)處理功能
動態(tài)設(shè)置自動驗證和自動完成支持
更加靈活強大的緩存管理方法
日志記錄簡化、增加IP支持
致命錯誤的捕獲機制完善
頁面Trace機制改進(jìn)和分類顯示支持
超過128項更新
ThinkPHP 3.0.1 開發(fā)版 2012-04-05 [更新]
Action參數(shù)綁定支持
模型類命名范圍支持
全局系統(tǒng)變量安全過濾支持
增加IS_GET IS_POST IS_PUT 等請求類型常量
日志記錄改進(jìn) 優(yōu)化日志大小 增加IP記錄
U函數(shù)對子域名部署的增強和優(yōu)化
模型類增加filter連貫操作方法 用于對數(shù)據(jù)的安全過濾
模型類的data方法支持獲取當(dāng)前數(shù)據(jù)對象
Action類增加_param方法支持 可以自動根據(jù)當(dāng)前提交類型 獲取參數(shù)
Action類的_get _post方法支持多函數(shù)過濾
改進(jìn)ajaxReturn方法
改進(jìn)success和error方法
增加自動驗證的規(guī)則
分組模式下模型分組可以自動加載
模型類增加close方法 驅(qū)動類支持多數(shù)據(jù)庫連接關(guān)閉
模型類增加表單提交字段合法性檢測 配置insert_fields 和 update_fields
模型強制進(jìn)行數(shù)據(jù)字段類型驗證
增加DB_SLAVE_NO配置參數(shù) 用于指定讀服務(wù)器的序號
優(yōu)化模型的create方法的數(shù)據(jù)對象生成
自動驗證的function和callback規(guī)則支持多字段 [3.0版本]2012-3-23 [修正]
修正視圖模型擴展的checkOrder方法
修正U方法對默認(rèn)分組的完善
修正Redis緩存類
修正sqlsrv驅(qū)動
修正模式擴展中的Model類
修正模型的where方法傳人空參數(shù)的時候?qū)е耫elete方法刪除全部數(shù)據(jù)的問題
修正路由定義的大寫被強制轉(zhuǎn)換為小寫的錯誤
修正靜態(tài)緩存讀取行為擴展
修正Pgsql驅(qū)動
修正S方法的緩存有效期
修正Mongo驅(qū)動類
[刪除]
取消path_info標(biāo)簽擴展位置
取消TAG_NESTED_LEVEL配置參數(shù),該參數(shù)已經(jīng)無效
取消CheckTemplate行為擴展 并入核心App類的init方法
[增加]
App類增加action_name 行為標(biāo)簽位置 用于改變操作方法名
增加引擎擴展 SAE納入第一個引擎擴展
增加ENGINE_PATH常量定義 用于引擎擴展使用
增加PATH_INFO的兼容判斷功能
增加URL_PATHINFO_FETCH配置參數(shù)
增加FireShowPageTrace行為擴展 能將Trace信息輸出到火狐的firebug
增加Wincache緩存擴展驅(qū)動
[完善]
SAE引擎代碼優(yōu)化
優(yōu)化ThinkPHP入口文件
改進(jìn)模塊名的安全檢測 取消異常拋出改成引導(dǎo)到空模塊環(huán)節(jié)
改進(jìn)Widget類的template屬性處理,不區(qū)分大小寫 方便定義
模型的field方法支持 field(true) 用法 表示獲取數(shù)據(jù)表的全部字段 (而不是*)
改進(jìn)對mysql驅(qū)動的關(guān)鍵字處理方法parseKey
改進(jìn)MongoDb驅(qū)動對讀寫分離的支持
改進(jìn)模板引擎的標(biāo)簽別名解析 別名可以無需要定義解析方法
改進(jìn)Db和sqlite緩存驅(qū)動類對有效期參數(shù)的判斷
規(guī)則路由定義支持完整匹配
改進(jìn)模板檢測的自定義模板目錄支持
[調(diào)整]
系統(tǒng)調(diào)試模式配置文件關(guān)閉模板緩存
模板字符串替換定義TMPL_PARSE_STRING區(qū)分大小寫
配置參數(shù)只支持一級不區(qū)分大小寫 二級以下配置參數(shù)區(qū)分大小寫調(diào)用
行為日志記錄類型改為Log::INFO 類型,方便通過配置文件 單獨關(guān)閉相關(guān)行為日志顯示和記錄
checkLang行為擴展調(diào)整語言包命名規(guī)范調(diào)整 項目公共語言包 common.php 分組語言包 分組名.php 模塊語言包 分組名_模塊名.php 或者 模塊名.php [2.1版本]2011-4-30 這次的重點更新是在核心應(yīng)用上的改造和效率方面的提升,主要體現(xiàn)在:
URL路由靈活模式,支持常規(guī)路由定義,正則路由匹配
對比2.0版本,新的路由模式更體貼和應(yīng)用更方便,同時在執(zhí)行效率上也得到了更簡潔而有效的處理。最重要的是定義路由將更簡單和直接,并且可選擇使用獨立文件定義或是直接配置定義。
2.1版本對分組模式完善了細(xì)節(jié)流程上的解析機制,增加了實用的常量定義和模板替換,同時添加了對二級域名的友好支持,對項目部署提供了更多方便
ThinkPHP內(nèi)置模板引擎舍棄了原來xml模式的解析,直接改由類屬性進(jìn)行定義標(biāo)簽,既減少了文件加載,提升了解析效率,在自定義標(biāo)簽和標(biāo)簽擴展上,也更加簡單和方便了
允許項目指定編譯緩存文件定義
系統(tǒng)函數(shù)庫functions列入核心編譯文件,不再默認(rèn)綁定到核心編譯
以上兩項更新雖微,但實際上意義非凡,對于多項目多應(yīng)用同時部署架構(gòu)時會起到非常重要的作用,核心的自由度更寬更廣了。
改進(jìn)tag函數(shù),插件機制可以直接定義要執(zhí)行的行為
項目初始化提供新的可自定義的部署模式
允許自定義項目首次運行時的訪問處理方式,系統(tǒng)由原來的簡單成功提示,改為探針模式友好提示,對于使用ThinkPHP部署的項目,在初始運行時將方便地提供服務(wù)器相關(guān)信息,對是否支持ThinkPHP運行環(huán)境進(jìn)行探測并報告和提出建議。
提供AMF模式支持
提供PhpRPC模式(感謝vanvvdot提供擴展)
lite模式增強,支持使用內(nèi)置模板引擎
數(shù)據(jù)插入時允許進(jìn)行更新操作
提供了更簡潔的連貫操作方式的數(shù)據(jù)庫切換
新增模板常量、變量定義等實用標(biāo)簽
其它一些應(yīng)用細(xì)節(jié)處理可對比svn更新記錄
Images圖像類恢復(fù)圖片水印支持
Model類恢復(fù)批量插入數(shù)據(jù)的addAll方法
優(yōu)化項目核心運行進(jìn)程細(xì)節(jié),去掉不常用功能
優(yōu)化系統(tǒng)進(jìn)程統(tǒng)計處理,提供G函數(shù)可進(jìn)行記錄和統(tǒng)計
完善了多語言在各服務(wù)器環(huán)境下的兼容性統(tǒng)一
完善了RelationModel方法兼容問題
完善了序列化字段處理
完善了數(shù)據(jù)編輯的時候唯一檢測的驗證
增加是否記錄異常信息日志開關(guān) LOG_EXCEPTION_RECORD
去除了原svn上的二級域名支持
去除了原svn上的前后置判斷處理
去除了個別不通用功能和配置
去除了URL重定向處理,減少HTTP請求的同時,也避免了因此帶來的一些錯誤。
對于以上已去除的功能開關(guān)不再生效 [1.0.4 版本] 2008-5-16 修正關(guān)聯(lián)寫入和數(shù)據(jù)字段過濾的沖突
修正哈希子目錄緩存方式
模塊配置文件命名改為:模塊名+_config.php
修正Compare標(biāo)簽
修正CX標(biāo)簽庫的判斷標(biāo)簽
修正模板引擎的IF標(biāo)簽的條件BUG
修改多數(shù)據(jù)庫連接和切換機制,取消addConnect方法的eqType參數(shù),避免了因來回切換的時候的錯誤
修正Db緩存和Sqlite緩存的數(shù)據(jù)過期判斷
增加項目配置檢測,如果項目配置文件發(fā)生修改,則重新生成編譯項目緩存。
增加跳轉(zhuǎn)頁面模板和404模板配置配置方式和Action類的display方法templateFile參數(shù)一致,默認(rèn)配置: 'ACTION_JUMP_TMPL'=> 'Public:success', 'ACTION_404_TMPL'=> 'Public:404'
Action類增加404操作方法頁面跳轉(zhuǎn)操作和404操作支持模板文件配置
修正html標(biāo)簽庫的link和import標(biāo)簽
增加數(shù)據(jù)查詢的IS NULL 和 IS NOT NULL支持
修正連貫操作的一些警告錯誤
完善join分析 支持left right等方式
修正模板引擎在舳癱昵┑那榭魷攣薹ㄕJ涑鰔ml標(biāo)識的問題
修正ORG.Date.Date類的maxDayOfMonth方法
完善多數(shù)據(jù)庫連接的切換
修改命令行自動創(chuàng)建工具build
修正連貫操作的field方法的判斷錯誤
修正Db類的一處where條件判斷的小問題
rand_string加上中文隨機字符串生成
修正兼容方法json_encode對布爾值的判斷
修正ArrayList類的addall方法
修正max min avg sum等查詢方法返回浮點型數(shù)據(jù)錯誤的問題
修正數(shù)組方式查詢的自己使用Like問題
iterate標(biāo)簽增加mod屬性,用于計算循環(huán)變量的取模替換原來的odd屬性
增加Input類,用于輸入數(shù)據(jù)管理
刪除已經(jīng)廢棄的目錄檢查插件
優(yōu)化模板引擎解析,避免多次實例化模板解析類并簡化模板解析類的寫法,去掉架構(gòu)方法定義
修改mobile驗證的正則
增加了分頁類關(guān)于負(fù)數(shù)的判斷
部分CX標(biāo)簽的屬性可以支持特殊模板變量
F方法生成的文件會自動加上THINK_PATH判斷,避免直接執(zhí)行
取消了當(dāng)指定模塊和操作不存在的時候執(zhí)行默認(rèn)模塊和默認(rèn)操作,由用戶自己定義空模塊和空操作來處理。
增加了連貫操作的data方法,用于指定要操作的數(shù)據(jù)
去掉了已經(jīng)廢棄的三個配置參數(shù):DB_CACHE_ON DB_CACHE_TIME DB_CACHE_MAX
增加表單提交的MAGIC_QUOTES_GPC判斷
model類的query和execute方法支持使用__TABLE__字符串系統(tǒng)會自動替換成當(dāng)前模型對應(yīng)的表名
調(diào)整了空操作和直接判斷模板文件的順序空操作優(yōu)先執(zhí)行
修正Cookie類支持關(guān)閉瀏覽器就失效的情況設(shè)置COOKIE_EXPIRE為0或者空字符串或者在使用的時候傳遞參數(shù)0 Cookie::set($name,$value,0);
項目編譯緩存文件也加上是否去掉注釋的開關(guān) [1.0.3 版本] 2008-3-16 增加空模塊支持 如果指定的模塊不存在會首先定位是否存在Empty模塊
增加核心編譯文件的去除空白和注釋的開關(guān),在入口文件定義 STRIP_RUNTIME_SPACE 常量為false 可以關(guān)閉去除空白和注釋
Action緩存由原來的userCache成員屬性控制改為項目參數(shù) ACTION_CACHE_ON 控制,便于動態(tài)控制
增加數(shù)據(jù)庫字段緩存的開關(guān) 慣例配置增加DB_FIELDS_CACHE 用以設(shè)置數(shù)據(jù)庫字段是否緩存,默認(rèn)進(jìn)行緩存
修正xcache和sqlite緩存方式的讀寫次數(shù)記錄
使用視圖模型的時候,如果主鍵是id,不需要再定義getPk方法
修正多語言和多模板的cookie問題
入口文件免設(shè)置APP_NAME APP_PATH
完善Cookie類
修正模板檢查的時候組件化的支持
模型類的查詢操作支持連貫方法
去掉了一些廢棄的慣例配置參數(shù),包括:DATA_CACHE_ON 和 DATA_CACHE_MAX
慣例配置增加了DATA_CACHE_SUBDIR參數(shù)控制文件緩存方式是否自動使用子目錄哈希緩存
在項目根目錄不存在的情況下自動創(chuàng)建
完善對跨庫查詢的支持
目錄自動創(chuàng)建支持寫入安全文件 [ 1.0.2 ] 2008-2-21 Model類增加toArray方法
修正因Log類的改動導(dǎo)致Trace錯誤信息無法正常顯示的問題
數(shù)據(jù)查詢返回的數(shù)據(jù)集由ArrayObject對象改成數(shù)組
修正Model類的create方法在定義字段映射的下面的bug
修正虛擬模型下面create方法的bug
Model類的facade方法增加數(shù)據(jù)表字段的檢測
優(yōu)化Image類的showAdvVerify方法
修正標(biāo)簽庫的compare標(biāo)簽
Trace配置文件由原來的_trace.php更名為trace.php
項目調(diào)試配置文件由原來的_debug.php更名為debug.php
項目配置文件由原來的_config.php更名為config.php
路由定義文件由原來的_routes.php 更名為 routes.php
靜態(tài)定義文件由原來的_htmls.php 更名為 htmls.php
Model類的create方法無需type參數(shù),自動判斷新增和編輯模型數(shù)據(jù)
增加第一次運行目錄自動生成功能(只需要定義入口文件)
默認(rèn)項目編譯緩存目錄為Temp目錄 [ 1.0.1 ] 2008-2-2 修正Db類在Oracle下面的parseLimit方法判斷
優(yōu)化數(shù)據(jù)庫驅(qū)動類的查詢結(jié)果獲取
Model 類增加字段的表達(dá)式插入和更新支持
完善了Db類的條件查詢字段中帶有空格的處理
Model類增加了delConnect方法用于刪除動態(tài)增加的數(shù)據(jù)庫連接
增強了分布式數(shù)據(jù)庫的支持 可以設(shè)置是否需要讀寫分離
Model類增加智能切換功能 switchConnect方法可以自動識別是否是相同的數(shù)據(jù)庫連接類型
增加了組件模塊的URL分割定義配置 COMPONENT_DEPR 包括對操作鏈的設(shè)置采用相同的參數(shù)定義
修正Model類的count等統(tǒng)計方法會自動緩存的問題 DB類默認(rèn)關(guān)閉查詢緩存
修正RBAC組件的權(quán)限判斷
修正組件模塊方式下面的模板文件../Public的替換
修正Html標(biāo)簽庫的list標(biāo)簽的actionlist屬性的支持
修正PDO類在某些數(shù)據(jù)庫下面的getAll方法的BUG
增加核心緩存文件的開關(guān)功能 在入口文件里面設(shè)置 CACHE_RUNTIME 為 false
修正了使用組件模塊的時候模板文件中__URL__的解析問題
修正模板和語言的切換cookie
Model類增加addConnect和switchConnect方法 用于支持多數(shù)據(jù)庫的連接
修正了語言包的緩存導(dǎo)致切換語言無效的問題
Db類增加多數(shù)據(jù)庫連接的內(nèi)置支持
修正Model類在某些數(shù)據(jù)庫下面where條件表達(dá)式不支持where 1 的情況
Db類增加getLastSql方法用于獲取最后一次查詢的sql語句
完善Log類的操作以及優(yōu)化錯誤日志的寫入
修正model的數(shù)據(jù)庫連接配置讀取
在ajax返回之前保存日志記錄
完善compare標(biāo)簽
改進(jìn)Vendor函數(shù)的baseUrl參數(shù)定義
改進(jìn)項目語言包的定義 不同語言分成不同子目錄
簡化了query方法的數(shù)據(jù)庫緩存
增加clearCache方法,用于清空項目相關(guān)緩存目錄
增加firebird數(shù)據(jù)庫驅(qū)動支持
修正pgsql驅(qū)動
修正 app.php 文件的編譯緩存路徑的問題
增加編譯緩存路徑的設(shè)置 RUNTIME_PATH [ 1.0.0 ] 2007-12-25 優(yōu)化了執(zhí)行效率和內(nèi)存開銷
Import方法增加同名檢測和類檢測
完善PHP 5.2.0以下版本的支持
去掉了核心對Config、Language、Cookie和Session類庫的依賴
去掉了Action類內(nèi)置的默認(rèn)操作
改進(jìn)了MySqli的驅(qū)動類庫
修正了主鍵不是自動增長的時候Model的add方法返回錯誤
修正了mysqli的escape_string方法
修正了PDO的連接params參數(shù)問題
修正了Model的findAll的關(guān)聯(lián)查詢問題
修正了Model類的getModelName方法問題
修正了RBAC的模塊大小寫設(shè)置
去掉volist resultset標(biāo)簽,均作為iterate標(biāo)簽的別名
增加了項目編譯機制和核心類庫編譯機制
標(biāo)簽庫定義增加標(biāo)簽的別名定義
XML模版結(jié)束標(biāo)簽增加對空格的支持
增加compare標(biāo)簽和eq neq gt egt lt elt heq 和nheq標(biāo)簽別名
增加了多模版和多語言的開關(guān)
RBAC認(rèn)證增加了操作的認(rèn)證設(shè)置,之前只支持模塊的認(rèn)證設(shè)置
2012年度最受歡迎中國開源軟件第二名 [13] 參考資料
該文章在 2024/3/15 12:46:28 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |