thinkphp50完全開發(fā)手冊八哥給_第1頁
thinkphp50完全開發(fā)手冊八哥給_第2頁
thinkphp50完全開發(fā)手冊八哥給_第3頁
thinkphp50完全開發(fā)手冊八哥給_第4頁
thinkphp50完全開發(fā)手冊八哥給_第5頁
已閱讀5頁,還剩102頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1-基礎(chǔ)1-基礎(chǔ).note安裝.note安裝框架放入WEB運行環(huán)境(前提是你的WEB運嚴格來說,無需安裝過程,這里所說的安裝其實就是把行環(huán)境已經(jīng)OK),可以通過兩種方式獲取和安裝。一、安裝獲取的方式很多,官方()是最和文檔獲取來源。官網(wǎng)提供了版本的:二、使用Composer安裝支持使用Composer安裝,如果還沒有安裝 Composer,你可以按 Composer安裝中的Mac OS X 中可以運行如下命令:安裝。在 Linux 和 | phpcurl -sS mv composer.phar /usr/local/bin/composer在 Windows 中,你需要并運行 Compose

2、r-Setup.exe。如果遇到任何問題或者想更深入地學習 Composer,請參考 Composer 文檔(英文),Composer 中文。如果你已經(jīng)安裝有 Composer 請確保使用的是最新版本,你可以用 composer self-update 命令更新 Composer 為最新版本。然后在命令行下面,切換到你的web根目錄下面并執(zhí)行下面令:composer create-project topthink/think tp5 dev-master -prefer-dist由于目前尚未正式發(fā)布,所以先用dev-master分支。如果出現(xiàn)錯誤提示,請根據(jù)提示操作或者參考Composer中文

3、文檔。如果國內(nèi)composer的速度比較慢,可以參考這里的說明使用國內(nèi)鏡像無論你采用什么方式獲取的框架,現(xiàn)在只需要做最后一步來驗證是否正常運行。在瀏覽器中輸入地址:如果瀏覽器輸出:的環(huán)境要求如下:PHP >= 5.4.0PDO PHP Extension CURL PHP Extension恭喜你,現(xiàn)在已經(jīng)完成的安裝!如果你無法正常運行并顯示的歡迎頁面,那么請檢查下你的服務(wù)器環(huán)境:PHP5.4以上版本(注意: PHP5.4dev版本和PHP6均不支持) WEB服務(wù)器是否正常啟動開發(fā)規(guī)范.note命名規(guī)范名規(guī)范如下:目錄和文件命名目錄和文件名采用 小寫+下劃線,并且以小寫字母開頭; 類庫、

4、函數(shù)文件統(tǒng)一以.php為后綴;類的文件名均以命名空間定義,并且命名空間的路徑和類庫文件所在路徑一致( 類名和類文件名保持一致,并統(tǒng)一采用駝峰法命名(首字母大寫)大小寫);類、和屬性命名類名采用駝峰法,并且首字母大寫,例如User、UserType;名使用駝峰法,并且首字母小寫或者使用下劃線“_”,例如getUserName,_parseType,通常下劃線開頭的 屬性屬于私有;名使用駝峰法,并且首字母小寫或者使用下劃線“_”,例如tableName、_instance,通常下劃線開頭的屬性屬于私有屬性;作為魔法,例如 call 和 autoload;以雙下劃線“ ”打頭的函數(shù)或函數(shù)命名函數(shù)名使

5、用小寫字母和下劃線(小寫字母開頭)的方式,例如get_ip;命名以大寫字母和下劃線命名,例如 APP_DEBUG和 APP_MODE;配置命名配置參數(shù)以小寫字母和下劃線命名,例如url_route_on;數(shù)據(jù)表和字段命名數(shù)據(jù)表和字段采用小寫加下劃線方式命名,并注意字段名不要以下劃線開頭,例如think_user 表和user_name字段,類似_username 這樣的數(shù)據(jù)表字段可能會被過濾。應(yīng)用類庫命名空間規(guī)范應(yīng)用類庫的根命名空為app(可以設(shè)置APP_NAMESPACE更改);例如:appindexcontrollerIndex和appindexmUser。請避免使用PHP保留字(保留字列

6、表參見)作為、類名 和名,以及命名空間名,否則會造成系統(tǒng)錯誤。目錄結(jié)構(gòu).note最新版框架后,解壓縮到web目錄下面,可以看到初始的目錄結(jié)構(gòu)如下:5.0的部署建議是public目錄作為web目錄內(nèi)容,其它都是web目錄之外,當然,你必須要修改public/index.php中的相關(guān)路徑。如果沒法做到這點,請記得設(shè)置目錄的權(quán)限或者添加目錄列表的保護文件。5.0版本自帶了一個完整的應(yīng)用目錄結(jié)構(gòu)和默認的應(yīng)用文件,開發(fā)可以在這個基礎(chǔ)之上靈活調(diào)整。上面的目錄結(jié)構(gòu)和名稱是可以改變的,尤其是應(yīng)用的目錄結(jié)構(gòu),這取決于你的文件和配置參數(shù)。由于.0.0的架構(gòu)設(shè)計對模塊的目錄結(jié)構(gòu)保留了很多的靈活性,尤其是對于用于的

7、目錄具有高度router.php用于php自帶webserver支持,可用于快速測試啟動命令:php -S localhost:8888 router.phpproject 應(yīng)用部署目錄application應(yīng)用目錄(可設(shè)置) common公共模塊目錄(可更改) index模塊目錄(可更改) config.php模塊配置文件 common.php模塊函數(shù)文件 controller器目錄 m模型目錄 view視圖目錄 .類庫目錄 d.php命令行工具配置文件 common.php應(yīng)用公共(函數(shù))文件 config.php應(yīng)用(公共)配置文件 database.php數(shù)據(jù)庫配置文件 route.p

8、hp路由配置文件runtime應(yīng)用的運行時目錄(可寫,可設(shè)置)extend擴展類庫目錄(可定義)publicWEB 部署目錄(對外目錄) static靜態(tài)資源存放目錄(css,js,image) index.php應(yīng)用文件 .htaccess用于 apache 的重寫框架系統(tǒng)目錄 lang語言包目錄 library框架類庫目錄 behavior系統(tǒng)行為類庫目錄 thinkThink 類庫包目錄 traits系統(tǒng) Traits 目錄 mode應(yīng)用模式目錄 tpl系統(tǒng)模板目錄 .htaccess用于 apache 的重寫 .travis.ymlCI件 base.php基礎(chǔ)件 composer.js

9、oncomposer件 convention.php慣例配置文件 helper.php助手函數(shù)文件(可選) LICENSE.txt說明文件 phpunit.xml單元測試配置文件 ME.mdME 文件 start.php框架引導文件vendor第類庫目錄(Composer).gitignoreGit 忽略規(guī)則build.php自動生成件(參考)composer.jsoncomposer件console命令行工具LICENSE.txt說明文件ME.mdME 文件router.php快速測試文件(用于PHP自帶webserver)的定制化,因此上述的目錄結(jié)構(gòu)建議參考。2-架構(gòu).note2-架構(gòu)總覽

10、.note.0應(yīng)用基于MVC(模型-視圖-器)的方式來組織。MVC是一個設(shè)計模式,它強制性的使應(yīng)用程序的輸入、處理和輸出。使用MVC應(yīng)用程序被分成三個部件:模型(M)、視圖(V)、器(C),它們各自處理的任務(wù)。5.0的URL受路由決定,如果關(guān)閉路由或者沒有匹配路由的情況下,則是基于:(或者其它應(yīng)用文件)/模塊/器/操作/參數(shù)/值.下面的一些概念有必要做下了解,可能在后面的內(nèi)容中經(jīng)常會被提及。文件用戶請求的PHP文件,負責處理一個請求(注意,不一定是URL請求)的生命周期,最常見的文件就是index.php,有時候也會為了某些特殊的需求而增加新的文件,例如給文件。模塊單獨設(shè)置的一個文件admin

11、.php或者一個器程序console.php都屬于應(yīng)用應(yīng)用在中是一個管理系統(tǒng)架構(gòu)及生命周期的對象,的 thinkApp類完成,應(yīng)用通常在文件中被調(diào)文件。用和執(zhí)行,具有相同的應(yīng)用目錄(APP_PATH)的應(yīng)用我們認為是同一個應(yīng)用,但一個應(yīng)用可能多個應(yīng)用具有的基礎(chǔ)配置文件、公共文件,也稱為應(yīng)用公共配置和公共函數(shù)文件。模塊一個典型的應(yīng)用是由多個模塊組成的,這些模塊通常都是應(yīng)用目錄下面的一個子目錄,每個模塊都 件、公共文件和類庫文件。的配置文器每個模塊擁有的器類。的MVC類庫及配置文件,一個模塊下面有多個器負責響應(yīng)請求,而每個器其實就是一個器主要負責請求的接收,并調(diào)用相關(guān)的模型處理,并最終通過視圖輸出

12、。嚴格來說, 邏輯處理。器不應(yīng)該過多的介入業(yè)務(wù)5.0的器類比較靈活,可以無需繼承任何基礎(chǔ)類庫。一個典型的Index器類如下:操作namespaceappindexcontroller;classIndexpublicfunctionindex() return'hello,!'事實上,5.0中器是可以被跳過的,通過路由我們可以直接把請求調(diào)度到某個模型或者其他的類進行處理。5.0支持單一模塊架構(gòu)設(shè)計,如果你的應(yīng)用下面只有一個模塊,那么這個模塊的子目錄可以省略,并且在文件中定義如下:define('APP_MULTI_MODULE',false);一個器包含多個操作

13、(),操作是一個URL的最小單元。下面是一個典型的Index器的操作定義,包含了兩個操作:操作可以不使用任何參數(shù),如果定義了一個非可選參數(shù),則該參數(shù)必須通過用戶請求傳入,如果是URL請求,則通常是$_GET或者$_POST方式傳入。模型模型類通常完成實際的業(yè)務(wù)邏輯和數(shù)據(jù),并返回和格式無關(guān)的數(shù)據(jù)。模型類并不一定要數(shù)據(jù)庫,而且在5.0的架構(gòu)設(shè)計中,只有進行實際的數(shù)據(jù)庫操作的時候,進行數(shù)據(jù)庫的連接,是真正的惰性連接。的模型層支持多層設(shè)計,你可以對模型層進行更細化的設(shè)計和分工,例如把模型層分為邏輯層/服務(wù) 層等等。層/視圖器調(diào)用模型類后返回的數(shù)據(jù)通過視圖組裝成不同格式的輸出。視圖根據(jù)不同的需求,來決定

14、調(diào)用模板引擎進行內(nèi)容 后輸出還是直接輸出。視圖通常會有一系列的模板文件對應(yīng)不同的器和操作,并且支持模板。驅(qū)動系統(tǒng)很多的組件都采用驅(qū)動式設(shè)計,從而可以更靈活的擴展,驅(qū)動類的位置默認是放入類庫目錄下面,也可以重新定義驅(qū)動類庫名空間而改變驅(qū)動的文件位置。行為行為(Behavior)是在預先定義一個應(yīng)用位置執(zhí)行的一些操作。類似于AOP編程中的“切面”的概念,給某一個切面綁定相關(guān)行為就成了一種類AOP編程的思想。所以,行置上。常是和某個位置相關(guān),行為的執(zhí)行時間依賴于綁定到了哪個位要執(zhí)行行為,首先要在應(yīng)用進行行為偵聽,例如:然后對某個位置進行行為綁定:一個位置上如果綁定了多個行為的,按照綁定的順序依次執(zhí)行

15、,除非遇到中斷。命名空間采用了PHP名空間設(shè)計和規(guī)劃類庫文件,并且符合PSR-4的自動加載規(guī)范。文件.note文件采用單一模式進行項目部署和,無論完成什么功能,一個應(yīng)用一個統(tǒng)一(但不一定是唯一)的入口。/ 綁定行為到app_init位置thinkHook:add('app_init','appindexbehaviorTest');/ 在app_init位置偵聽行為thinkHook:listen('app_init');namespaceappindexcontroller;classIndexpublicfunctionindex() ret

16、urn'index'publicfunctionhello($name) return'Hello,'.$name;應(yīng)該說,所有應(yīng)用都是從文件開始的,并且不同應(yīng)用的文件是類似的。文件定義文件主要完成:定義框架路徑、項目路徑(可選) 定義調(diào)試模式和應(yīng)用模式(可選)定義系統(tǒng)相關(guān)(可選)載入框架文件(必須)5.0默認的應(yīng)用文件位于public/index.php,內(nèi)容如下:修改文件位置請查看章節(jié)<部署-虛擬主機環(huán)境>文件,而不需要調(diào)用應(yīng)用執(zhí)行,系統(tǒng)會自動調(diào)用thinkApp類的run默認情況下,只需要加載框架,如果你需要在執(zhí)行run之前做其他的操作,可以這

17、樣定義文件:生命周期.note本篇內(nèi)容我們對.0的應(yīng)用請求的生命周期做大致的,以便于開發(fā)者了解整個執(zhí)行流程。1、文件用戶發(fā)起的請求都會經(jīng)過應(yīng)用的文件,通常是 public/index.php文件。當然,你也可以更改或者增加新的件。文通常文件的代碼都比較簡單,一個普通的文件代碼如下:文件已定義一些為主,支持的請參考后續(xù)的內(nèi)容或者附錄部分。通常,我們不建議在應(yīng)用文件中加入過多的代碼,尤其是和業(yè)務(wù)邏輯相關(guān)的代碼。2、引導文件接下來就是執(zhí)行框架的引導文件,start.php文件就是系統(tǒng)默認的一個引導文件。在引導文件中,會依次執(zhí)行下面操作:加載系統(tǒng)定義;自動加載機制;模式件;加載模式命名空間定義;加載模

18、式別件;/ 應(yīng)用文件/ 定義項目路徑define('APP_PATH', DIR . '/./application/');/ 開啟調(diào)試模式define('APP_DEBUG', true);/ 加載框架引導文件require DIR . '/./start.php'/ 改變應(yīng)用目錄的名稱define('APP_PATH', DIR .'/apps/');/ 關(guān)閉應(yīng)用自動執(zhí)行define('APP_AUTO_RUN', false);/ 加載框架引導文件require'./t

19、hink/start.php'/ 這里添加應(yīng)用執(zhí)行之前需要的代碼/ 類已經(jīng)支持自動加載./ 執(zhí)行應(yīng)用thinkApp:run();文件中還可以定義一些系統(tǒng)變量,用于相關(guān)的綁定操作(通常用于多個的情況),這個會在后面涉及,暫且不提。給APP_PATH定義絕對路徑會提的加載效率。文件位置的設(shè)計是應(yīng)用部署更安全,public目錄為web可目錄,其他的文件都可以放到非WEB目錄下面。/ 定義應(yīng)用目錄define('APP_PATH', DIR . '/./application/');/ 開啟調(diào)試模式define('APP_DEBUG', tru

20、e);/ 加載框架引導文件require DIR . '/./start.php'錯誤和異常處理機制; 加載模式配置文件;加載模式行件;如果開啟自動執(zhí)行則執(zhí)行應(yīng)用;當前應(yīng)用的模式由APP_MODE決定,默認為common模式,如果需要更改應(yīng)用模式則可以在應(yīng)用 定義。文件中更改如果在你的應(yīng)用文件中更改了默認的引導文件,則上述執(zhí)行流程可能會跟隨發(fā)生變化。3、自動加載系統(tǒng)會調(diào)用Loader:register()自動加載,在這一步完成后,所有符合規(guī)范的類庫(Composer依賴加載的第類庫)都將自動加載。系統(tǒng)的自動加載由兩個部分組成:1.2.系統(tǒng)的自動加載thinkLoader:aut

21、oload Composer自動加載(符合Composer規(guī)范即可)一個類庫的自動加載檢測順序為:1. 是義類庫;2. Composer自動加載檢測;3. 是否為名空間;4. 檢測EXTEND_PATH目錄下的擴展類庫;如果檢測到以上任何一處,則按照PSR-4命名規(guī)范自動加載??梢钥吹?,定義類庫的方式是最高效的。在調(diào)試模式下面如果沒有加載到會一個notic錯誤。4、錯誤和異常機制執(zhí)行Error:register()由三部分組成:錯誤和異常處理機制。應(yīng)用關(guān)閉錯誤處理異常處理:thinkError:appShutdown:thinkError:appError:thinkError:appExce

22、ption 應(yīng)用關(guān)閉是為了便于攔截一些系統(tǒng)錯誤。在整個應(yīng)用請求的生命周期過程中,如果拋出了異常或者嚴重錯誤,均會導致應(yīng)用提前結(jié)束,并響應(yīng)輸出異常和錯誤信 息。5、應(yīng)用初始化執(zhí)行應(yīng)用的第一步操作就是對應(yīng)用進行初始化,:加載應(yīng)用(公共)配置; 加載應(yīng)用狀態(tài)配置;加載別名定義; 加載行為定義;加載公共(函數(shù))文件;加載擴展配置文件(由extra_config_list定義);加載擴展函數(shù)文件(由extra_file_list定義); 設(shè)置默認時區(qū);加載系統(tǒng)語言包;6、URL檢測應(yīng)用初始化完成后,就會進行URL的檢測,PATH_INFO檢測和URL后綴檢測。5.0的URL必須是PATH_INFO方式(

23、兼容方式)的URL地址,例如:所以,如果你的環(huán)境只能支持普通方式的URL參數(shù),那么必須使用如果是命令行下面文件的話,則通過$phpindex.php index/index/hello/val/value.獲取到正常的$_SERVER'PATH_INFO'參數(shù)后才能繼續(xù)。如果有設(shè)置url_deny_suffix參數(shù),則會過濾的URL后綴請求。7、路由檢測如果開啟了url_route_on參數(shù)的話,會首先進行URL的路由檢測。如果一旦檢測到匹配的路由,根據(jù)定義的路由地址會5.0的路由地址支持如下方式:到相應(yīng)的URL調(diào)度。路由到模塊/器/操作;路由到外部重定向地址;路由到器;路由到

24、閉包函數(shù);路由到類的;路由地址可能會受域名綁定的影響。如果關(guān)閉路由或者路由檢測無效則進行默認的模塊/器/操作的分析識別。8、分發(fā)請求在完成了URL檢測和路由檢測之后,路由器會分發(fā)請求到對應(yīng)的路由地址,這也是應(yīng)用請求的生命周期中最重要的一個 環(huán)節(jié)。在這一步驟中,完成應(yīng)用的業(yè)務(wù)邏輯及數(shù)據(jù)返回。建議統(tǒng)一使用return返回數(shù)據(jù),而不是echo輸出,如非必要,請不要執(zhí)行exit中斷。直接echo輸出的數(shù)據(jù)將無法進行自動轉(zhuǎn)換響應(yīng)輸出的便利。下面是系統(tǒng)支持的分發(fā)請求機制,可以根據(jù)情況選擇:模塊/器/操作這是默認的分發(fā)請求機制,系統(tǒng)會根據(jù)URL或者路由地址來當前請求的模塊、器和操作名,并自動調(diào)用相應(yīng)的器類,

25、執(zhí)行操作對應(yīng)的。該機制下面,首先會當前模塊,并進行模塊的初始化操作(和應(yīng)用的初始化操作類似),模塊的配置參數(shù)會覆蓋應(yīng)用的尚未生效的配置參數(shù)。支持模塊、URL參數(shù)綁定到,以及操作綁定到類等一些功能。器和前式類似,只是無需模塊、器和操作,直接分發(fā)請求到一個指定的器類的,因此沒有進行模塊的初始化操作。外部重定向可以直接分發(fā)請求到一個外部的重定向地址,支持指定重定向代碼,默認為301重定向。閉包函數(shù)路由地址定義的時候可以直接采用閉包函數(shù),完成一些相對簡單的邏輯操作和輸出。類的除了以上,還支持分發(fā)請求到類的,:' 類的靜態(tài): 'blog/:id'=>'orgutil

26、Blog::'blog/:id'=>'appindexcontrollerBlog',''如果在應(yīng)用初始化的時候指定了應(yīng)用調(diào)度方式,那么路由檢測是可選的。可以使用 thinkApp:dispatch() 進行應(yīng)用調(diào)度。9、響應(yīng)輸出器的所有操作都是return返回而不是直接輸出,系統(tǒng)會調(diào)用Response:send將最終的應(yīng)用返回的數(shù)據(jù)輸出到頁面或者客戶端,并自動轉(zhuǎn)換成default_return_type參數(shù)配置的格式。所以,應(yīng)用執(zhí)行的數(shù)據(jù)輸出只需要返回一個正常的PHP數(shù)據(jù)即可。10、應(yīng)用結(jié)束事實上,在應(yīng)用的數(shù)據(jù)響應(yīng)輸出之后,應(yīng)用并沒真正的

27、結(jié)束,系統(tǒng)會在應(yīng)用輸出或者中斷后進行日志保存寫入操作。系統(tǒng)的日志用戶調(diào)試輸出的和系統(tǒng)自動生成的日志,統(tǒng)一會在應(yīng)用結(jié)束的時候進行寫入操作。而日志的寫入操作受日志初始化的影響,支持寫入到日志文件、頁面Trace,甚至是Socket服務(wù)器。URL.noteURL設(shè)計.0在沒有啟用路由的情況下典型的URL規(guī)則是:支持切換到命令行,如果切換到命令行模式下面的規(guī)則是:>php.exe index.php(或者其它應(yīng)用文件) 模塊/器/操作/參數(shù)名/參數(shù)值.可以看到,無論是URL還是命令行,都采用PATH_INFO地址,其中PATH_INFO的分隔符是可以設(shè)置的。注意:5.0取消了URL模式的概念,并

28、且普通模式的URL不再支持,如果不支持PATHINFO的服務(wù)器可以使用兼容模式如下:必要的時候,我們可以通過某種方式,省略URL里面的模塊和器。URL大小寫默認情況下,URL是不區(qū)分大小寫的,也就是說 URL里面的模塊/時候會轉(zhuǎn)換為駝峰法處理。器/操作名會自動轉(zhuǎn)換為小寫,器在最后調(diào)用的例如: 和下面的是等效的如果下面的地址st/如果不希望URL自動轉(zhuǎn)換,可以在應(yīng)用配置文件中設(shè)置:隱藏文件在.0中,出于優(yōu)化的URL原則,還支持通過URL重寫隱藏文件,下面以Apache為例說明隱藏應(yīng)用入口文件index.php的設(shè)置。下面是Apache的配置過程,可以參考下:1、httpd.conf配置文件中加載

29、了mod_rewrite.so模塊2、AllowOverride None 將None改為 All 3、在應(yīng)用文件添加.htaccess文件,內(nèi)容如下: 和下面的是等效的/ 關(guān)閉器名的自動轉(zhuǎn)換'url_controller_convert'=> false,/ 關(guān)閉操作名的自動轉(zhuǎn)換'url_action_convert'=> false,參數(shù)值.(或者其它應(yīng)用文件)?s=/模塊/器/操作/參數(shù)名/值.(或者其它應(yīng)用文件)/模塊/器/操作/參數(shù)名/參數(shù)模塊設(shè)計.note5.0版本對模塊的功能做了靈活設(shè)計,默認采用多模塊的架構(gòu),并且支持單一模塊設(shè)計,所有

30、模塊為根命名空間(可配置更改)。名空間均以app作目錄結(jié)構(gòu)標準的應(yīng)用和模塊目錄結(jié)構(gòu)如下:遵循.0名規(guī)范,模塊目錄全部采用小寫和下劃線命名。模塊名稱請避免使用PHP保留關(guān)鍵字(保留字列表參見),否則會造成系統(tǒng)錯誤。其中common模塊是一個特殊的模塊,默認是直接的,用于放置一些公共的類庫用于其他模塊的繼承。如果要更改公共模塊的名稱,可以在文件中定義:define('COMMON_MODULE','base');runtime目錄是默認的運行時目錄,存放應(yīng)用的相關(guān)日志、緩存等。要更改默認的runtime目錄位置,可以在應(yīng)用文件中定義:define('RUNT

31、IME_PATH','./runtime/');模塊類庫以app模塊名開頭,例如:一個模塊下面的類庫文件名空其中app可以通過定義的方式更改,例如在文件中定義:define('APP_NAMESPACE','application');那么,index模塊的類庫命名空間則變成:的關(guān)于類庫和命名空間的以參考下一章節(jié):命名空間。/ index模塊的Index器類 applicationindexcontrollerIndex/ index模塊的User模型類 applicationindexmUser/ index模塊的Index器類 app

32、indexcontrollerIndex/ index模塊的User模型類 appindexmUserapplication應(yīng)用目錄(可設(shè)置) common公共模塊目錄(可更改) runtime應(yīng)用的運行時目錄(可寫,可設(shè)置) common.php公共函數(shù)文件 route.php路由配置文件 database.php數(shù)據(jù)庫配置文件 config.php公共配置文件 module1模塊1目錄 config.php模塊配置文件 common.php模塊函數(shù)文件 controller器目錄 m模型目錄 view視圖目錄 .類庫目錄 module2模塊2目錄 config.php模塊配置文件 comm

33、on.php模塊函數(shù)文件 controller器目錄 m模型目錄 view視圖目錄 .類庫目錄<IfModule mod_rewrite.c>RewriteEngineonRewriteCond%REQUEST_FILENAME !-d RewriteCond%REQUEST_FILENAME !-fRewriteRule (.*)$ index.php/$1 QSA,PT,L</IfModule>模塊和器隱藏由于默認是采用多模塊的支持,所以多個模塊的情況下必須在URL地址中標識當前模塊,如果只有一個模塊的話,可以進行模塊綁定,是應(yīng)用的公共文件中添加如下代碼:綁定后,我

34、們的URL地址則變成:的模塊是index模塊。如果你的應(yīng)用比較簡單,模塊和器都只有一個,那么可以在應(yīng)用公共文件中綁定模塊和器,如下:設(shè)置后,我們的URL地址則變成:應(yīng)用/操作/參數(shù)名/參數(shù)值.的模塊是index模塊,器是Index器單一模塊如果你的應(yīng)用比較簡單,只有唯一一個模塊,那么可以進一步簡化成使用單一模塊結(jié)構(gòu),如下:首先在文件中定義:然后,調(diào)整應(yīng)用目錄的結(jié)構(gòu)為如下:URL地址變成(或者其它應(yīng)用)/器/操作/參數(shù)名/參數(shù)值.同時,單一模塊設(shè)計下的應(yīng)用類庫名空間也有所調(diào)整,例如:原來的變成的URL簡化和定制還可以通過URL路由功能實現(xiàn)。命名空間.note命名空間appcontrollerIn

35、dex appmUserappindexcontrollerIndex appindexmUserapplication應(yīng)用目錄(可設(shè)置) runtime應(yīng)用的運行時目錄(可寫,可設(shè)置) controller器目錄 m模型目錄 view視圖目錄 .類庫目錄 common.php函數(shù)文件 route.php路由配置文件 database.php數(shù)據(jù)庫配置文件 config.php配置文件/ 關(guān)閉多模塊設(shè)計define('APP_MULTI_MODULE',false);/ 綁定index模塊的index器thinkRoute:bind('module','

36、index/index');器/操作/參數(shù)名/參數(shù)值./ 綁定index模塊thinkRoute:bind('module','index');采用命名空間方式定義和自動加載類庫文件,有效的解決了多模塊和Composer類庫之間題,并且實現(xiàn)了更加高效的類庫自動加載機制。名空間問在.0中,只需要給類庫正確定義所在名空間,并且命名空間的路徑與類庫文件的目錄一致,那么就可以實現(xiàn)類的自動加載,從而實現(xiàn)真正的惰性加載。例如,thinkcachedriverFile類的定義為:如果我們實例化該類的話,應(yīng)該是:$class = new thinkcachedriver

37、File();系統(tǒng)會自動加載該類對應(yīng)路徑的類文件,其所在的路徑是/library/think/cache/driver/File.php。5.0默認的目錄規(guī)范是小寫,類文件命名是駝峰法,并且首字母大寫。原則上,可以支持駝峰法命名的目錄,只名空間定義和目錄一致即可,例如:我們實例化$class = new ThinkCacheDriverFile();系統(tǒng)則會自動加載/library/Think/Cache/Driver/File.php文件。根命名空間(類庫包)根命名空間是一個關(guān)鍵的概念,以上面的thinkcachedriverFile類為例,think就是一個根命名空間,其對應(yīng)的初始命名空間

38、目錄就是系統(tǒng)的類庫目錄( 個類庫包。/library/think),我們可以簡單的理解一個根命名空間對應(yīng)了一系統(tǒng)內(nèi)置的幾個根命名空間(類庫包)如下:如果需要增加新的根命名空間,有兩種方式:新的根命名空間或者放入EXTEND_PATH目錄(自動)。自動我們只需要把的類庫包目錄放入EXTEND_PATH目錄(extend,可配置),就可以自動對應(yīng)名空間,例如:我們在extend目錄下面新增一個my目錄,然后定義一個myTest類( 類文件位于extend/my/Test.php)如下:namespacemy; classTest publicfunctionsayHello() echo'

39、hello'請注意本手冊中的示例代碼為了簡潔,如無指定類庫名空間的話, 都表示指的是think命名空間,例如下面的代碼:Route:get('hello','index/hello');請自行使用 use thinkRoute或者thinkRoute:get('hello','index/hello');名稱描述類庫目錄think系統(tǒng)類庫/library/thinktraits系統(tǒng)Trait類庫/library/traitsapp應(yīng)用類庫applicationnamespacethinkcachedriver; class

40、File 如果不清楚命名空間的基本概念,可以參考PHP手冊:PHP命名空間特別注意的是,如果你需要調(diào)用PHP內(nèi)置的類庫,或者第沒有使用命名空間的類庫,記得在實例化類庫的時候加上 ,例如:/ 錯誤的用法$class = new stdClass();$xml = new SimpleXmlElement($xmlstr);/ 正確的用法$class = new stdClass();$xml = new SimpleXmlElement($xmlstr);我們就可以直接實例化和調(diào)用:如果我們在應(yīng)用文件中重新定義了EXTEND_PATH的話,還可以改變myTest類文件的位置,例如:define(

41、'EXTEND_PATH','./vendor/');那么myTest類文件的位置就變成了/vendor/my/File.php。手動也可以通過手動的方式新的根命名空間,例如:在應(yīng)用文件中添加下面的代碼:thinkLoader:addNamespace('my','./application/extend/my/');如果要同時多個根命名空間,可以使用:也可以直接在應(yīng)用的配置文件中添加配置,系統(tǒng)會在應(yīng)用執(zhí)行的時候自動。應(yīng)用類庫包為了避免和Composer自動加載的類庫,應(yīng)用類庫名空間的根都統(tǒng)一以app命名,例如:其類文件位于 ap

42、plication/index/m/User.php。其類文件位于 application/admin/event/User.php。自動加載.note概述.0 真正實現(xiàn)了按需加載,所有類庫采用自動加載機制,并且支持類庫和composer類庫的自動加載。自動加載的實現(xiàn)由thinkLoader類庫完成,自動加載規(guī)范符合PHP的PSR-4。自動加載由于新版完全采用了命名空間的特性,因此只需要給類庫正確定義所在名空間,而命名空間的路徑與類庫文件的目錄一致,那么就可以實現(xiàn)類的自動加載。在符合PSR-4規(guī)范的條件下,類庫的自動加載檢測順序如下:1、優(yōu)先檢測是義類庫2、檢測composer自動加載的類庫3

43、、檢測根命名空間是否已經(jīng)namespaceappadminEvent; classUser namespace appindexm; classUserextendsthinkM'root_namespace' => 'my' => './application/extend/my/', 'org' => './application/extend/org/',thinkLoader:addNamespace('my' => './application/extend

44、/my/', 'org' => './application/extend/org/',);$Test = new myTest();$Test->sayHello();4、檢測擴展類庫目錄EXTEND_PATH下是否根命名空間對應(yīng)的子目錄系統(tǒng)會按順序檢測,一旦檢測生效的話,就會按照PSR-4規(guī)范自動載入對應(yīng)的類庫文件。類庫遵循我們上面名空間定義規(guī)范的話,基本上可以完成類庫的自動加載了,但是如果定義了較多名空間的話,效率會有所下降,所以,我們可以給常用的類庫定義類庫命名空間定位更高效,例如:。命名類庫相當于給類文件定義了一個別名,效率會比也可

45、以利用addMap批量導入類庫定義,例如:類庫導入如果你不需要系統(tǒng)的自動加載功能,又或者沒有使用命名空間的話,那么也可以使用thinkLoader類的import動加載類庫文件,例如:手類庫導入也采用類似命名空間的概念(但不需要實際名空間支持),支持的“根命名空間”:如果完全遵從系統(tǒng)名空間定義的話,來說無需手動加載類庫文件,直接實例化即可。Composer自動加載5.0版本支持Composer安裝的類庫的自動加載,你可以直接按照Composer依賴庫中名空間直接調(diào)用。traits引入.note.0開始采用PHP5.4的trait功能來作為一種擴展機制,可以方便的實現(xiàn)一個類庫的多繼承問題。Tra

46、its 是一種為類似 PHP 的單繼承語言而準備的代碼復用機制。Trait 為了減少單繼承語言的限制,使開發(fā)人員能夠地在不同層次結(jié)構(gòu)內(nèi)的類中復用集。Traits和類組合的語義是定義了式來減少復雜性,避免傳統(tǒng)多繼承和混入類(Mixin)相關(guān)的典型問題。但由于PHP5.4版本不支持trait的自動加載,因此如果是PHP5.4版本,必須手動導入trait類庫,系統(tǒng)提供了一個快捷的load_trait函數(shù)用于自動加載trait類庫,例如,可以這樣正確引入trait類庫。namespaceappindexcontroller;load_trait('controller/View');

47、/ 引入traitscontrollerViewclassindex use traitscontrollerView;publicfunctionindex()$this->assign('name','value');$this->show('index');目錄說明behavior系統(tǒng)行為類庫think基類庫traits系統(tǒng)Traits類庫app應(yīng)用類庫表示當前模塊類庫包Loader:import('org.util.array'); Loader:import('.util.upload');雖

48、然通過類庫的方式的類可以不強制要求對應(yīng)命名空間目錄,但是仍然建議遵循PSR-4規(guī)范定義類庫和目錄。$map = 'thinkLog'=>LIB_PATH.'thinkLog.php', 'orgutilarray'=>LIB_PATH.'orgutilArray.php'Loader:addMap($map);Loader:addMap('thinkLog',LIB_PATH.'thinkLog.php'); Loader:addMap('orgutilArray',LI

49、B_PATH.'orgutilArray.php');如果你的PHP版本大于5.5的話,則可以省略T函數(shù)引入trait??梢灾С滞瑫r引入多個trait類庫,例如:或者使用trait 方式引入的類庫需要注意優(yōu)先級,從基類繼承的成員被 trait蓋了 trait 的,而 trait 則覆蓋了被繼承的。的成員所覆蓋。優(yōu)先順序是來自當前類的成員覆trait 類中不支持定義類的,在 trait 中定義的屬性將不能在當前類中或者繼承的類中重新定義。的解決我們可以在一個類庫中引入多個trait類庫,如果兩個 trait 都定義了一個同名的致命錯誤。,如果沒有明確解決將會產(chǎn)生一個為了解決多個

50、trait 在同一個類中名,需要使用 insteadof 操作符來明確指定使用中的哪一個。以上排除掉其它,as 操作符可以將其中一個的以另一個名稱來引入。的關(guān)于traits的以參考PHP官方手冊。api友好.note新版API開發(fā)做了很多的優(yōu)化,并且不依賴原來的API模式擴展。數(shù)據(jù)輸出新版的器輸出采用Response類統(tǒng)一處理,而不是直接在器中進行輸出,通過設(shè)置default_return_type就可以自動進行數(shù)據(jù)轉(zhuǎn)換處理,來說,你只需要在器中返回字符串或者數(shù)組即可,例如如果我們配置:'default_return_type'=>'json'系統(tǒng)提供了一

51、些trait類庫,主要是用于器和模型類的擴展。這些系統(tǒng)內(nèi)置的trait類庫的根命名空間采用traits而不是trait,是因為避免和系統(tǒng)的關(guān)鍵字。namespaceappindexcontroller;load_trait('controller/View'); load_trait('controller/Jump');classindexuse traitscontrollerView,traitscontrollerJump; publicfunctionindex()namespaceappindexcontroller;load_trait('

52、controller/View'); load_trait('controller/Jump');classindexuse traitscontrollerView; use traitscontrollerJump;publicfunctionindex()namespaceappindexcontroller;classindexuse traitscontrollerView; publicfunctionindex()那么下面的器返回值會自動轉(zhuǎn)換為json格式并返回。該請求URL地址后,最終可以在瀏覽器中看到輸出結(jié)果如下:"data":&q

53、uot;name":"","url":".cn","code":1,"message":"u64cdu4f5cu5b8cu6210"如果你需要返回其他的數(shù)據(jù)格式的話,器本身的代碼無需做任何改變。支持的數(shù)據(jù)類型html、text、json和jsonp,其他類型的需要擴展,擴展兩種方式:第式是調(diào)用Respone:tramsform第二種方式是對return_data鉤子使用行為擴展。異常處理在API開發(fā)的情況下,只需要設(shè)置好default_return_type,就能返回相應(yīng)格式的異常,例如:'default_return_type'=>'json'當發(fā)生異常的時候,就會返回客戶端一個json格式的異常,例如:&q

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論