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