




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
北風(fēng)網(wǎng)項(xiàng)目培訓(xùn)Thinkphp基礎(chǔ)+項(xiàng)目實(shí)戰(zhàn)(cms學(xué)生學(xué)籍)講師:阿澤(北風(fēng)網(wǎng)版權(quán)所有)澤佑制作北風(fēng)網(wǎng)項(xiàng)目培訓(xùn)Thinkphp基礎(chǔ)+項(xiàng)目實(shí)戰(zhàn)(cms學(xué)生學(xué)籍1學(xué)習(xí)目標(biāo)MVC設(shè)計(jì)思想簡介了解國內(nèi)外主流PHPMVC開源框架簡介掌握thinkPHP框架簡介及使用流程(第一個helloworld)掌握thinkPHP中URL路徑訪問和控制器之間的關(guān)系掌握thinkPHP的模板替換與系統(tǒng)常量了解thinkPHP的調(diào)試方式的使用掌握thinkPHP的數(shù)據(jù)庫及CURD操作–綜合案例:用戶注冊登錄流程掌握thinkPHP的驗(yàn)證碼及分頁實(shí)現(xiàn)方式掌握thinkPHP的多語言及多模版支持掌握thinkPHP的緩存管理方式掌握thinkPHP的RBAC(基于角色的權(quán)限控制)了解thinkPHP的模版技術(shù)(view層–smarty)項(xiàng)目實(shí)戰(zhàn):CMS內(nèi)容管理系統(tǒng)(學(xué)生學(xué)籍管理)學(xué)習(xí)目標(biāo)MVC設(shè)計(jì)思想簡介2MVC簡介
MVC是一種軟件設(shè)計(jì)典范能被用于組織代碼用一種業(yè)務(wù)邏輯和數(shù)據(jù)顯示分離的方法。這個方法的假設(shè)前提是如果業(yè)務(wù)邏輯被聚集到一個部件里面,而且界面和用戶圍繞數(shù)據(jù)的交互能被改進(jìn)和個性化定制而不需要重新編寫業(yè)務(wù)邏輯MVC被獨(dú)特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中。
MVC(ModelViewController)模型(model)-視圖(view)-控制器(controller)。MVC本來是存在于Desktop程序中的,M是指數(shù)據(jù)模型,V是指用戶界面,C則是控制器。使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式。比如一批統(tǒng)計(jì)數(shù)據(jù)你可以分別用柱狀圖、餅圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應(yīng)該同步更新。
模型-視圖-控制器(MVC)是XeroxPARC在八十年代為編程語言Smalltalk-80發(fā)明的一種軟件設(shè)計(jì)模式,至今已被廣泛使用。最近幾年被推薦為Oracle旗下Sun公司JavaEE平臺的設(shè)計(jì)模式,并且受到越來越多的使用ColdFusion和PHP的開發(fā)者的歡迎。模型-視圖-控制器模式是一個有用的工具箱,它有很多好處,但也有一些缺點(diǎn)(小項(xiàng)目不必用mvc是實(shí)現(xiàn))。
分離好處:1)利于大型項(xiàng)目,方便后期業(yè)務(wù)邏輯的擴(kuò)展 2)利于項(xiàng)目組成員,各個成員的分工合作 facebook--哈佛大學(xué)的校園網(wǎng)--一個星期MVC簡介 MVC是一種軟件設(shè)計(jì)典范能被用于組織代碼用一種3MVC簡介
MVC的響應(yīng)請求結(jié)構(gòu),如下圖所示:MVC簡介 MVC的響應(yīng)請求結(jié)構(gòu),如下圖所示:4國內(nèi)主流PHPmvc框架ThinkPHP
ThinkPHP快速、借用了成熟的Java思想,但是實(shí)際使用過程中有些基本的CURD的關(guān)聯(lián)操作存在錯誤。ThinkPHP基于PHP5,充分利用了PHP5的特性。如:ThinkPHP的數(shù)據(jù)驗(yàn)證和自動填充,但是這個也束縛了ThinkPHP導(dǎo)致不考慮添加自動統(tǒng)計(jì)字段等小功能.
ThinkPHP還有一個特性是從自動生成數(shù)據(jù),但是這個卻不支持關(guān)聯(lián)。ThinkPHP有著十分優(yōu)秀的特性和思想,卻有著較一般的應(yīng)用實(shí)踐體驗(yàn)。ThinkPHP的文檔號稱最豐富,事實(shí)也是這樣,但是ThinkPHP的文檔和示例卻又太泛泛,比如表關(guān)聯(lián)只介紹了其在model里面的定義,其他的CURD操作都沒有提及。
國內(nèi)主流PHPmvc框架ThinkPHP
Think5國內(nèi)主流PHPmvc框架FleaPHP
FleaPHP是一個采用PHP開發(fā)(完全支持PHP4和PHP5)的應(yīng)用程序框架,為開發(fā)者創(chuàng)建自己的應(yīng)用程序提供了必要的基礎(chǔ)功能和輔助組件。它成熟、快速、功能豐富。但在一些細(xì)節(jié)上不如ThinkPHP人性化,如url函數(shù)。而且數(shù)據(jù)庫的操作上這種參數(shù)的安排也是沒有ThinkPHP人性化。FleaPHP對數(shù)據(jù)的操作很強(qiáng)大,居然可以操作中間表。FleaPHP的文檔和示例極少,學(xué)習(xí)成本大。但是一上手之后就很簡單了。
FleaPHP框架的核心非常小,但通過靈活的配置,可以組合出各種類型的基礎(chǔ)架構(gòu)。對于簡單的腳本頁面,F(xiàn)leaPHP不需要載入MVC模式,只需要為應(yīng)用程序提供業(yè)務(wù)邏輯和數(shù)據(jù)庫服務(wù)。而對于復(fù)雜的應(yīng)用程序,F(xiàn)leaPHP可以完成從MVC模式調(diào)用、訪問控制、數(shù)據(jù)驗(yàn)證到文件上傳、圖片處理等各種各樣的任務(wù)。正是因?yàn)檫@種出色的定制和擴(kuò)展能力,F(xiàn)leaPHP真正接近了“滿足從簡單應(yīng)用到企業(yè)開發(fā)的各種需求”這個目標(biāo)。而且與許多其他框架不同,F(xiàn)leaPHP是一個完全在實(shí)際開發(fā)中精煉出來的框架。
FleaPHP作為一個完全國產(chǎn)的框架,具有完全中文化的文檔、代碼注釋,并且在擴(kuò)展功能上也注重考慮國內(nèi)開發(fā)者的實(shí)際需求。因此相對于國外的各種框架,F(xiàn)leaPHP更容易被國內(nèi)開發(fā)者所接受。
總結(jié):
ThinkPHP框架是國內(nèi)比較優(yōu)秀的框架,功能強(qiáng)大,學(xué)習(xí)起來容易。其靈活設(shè)計(jì)秉承簡單的理念,如果太注重效率就使用FleaPHP國內(nèi)主流PHPmvc框架FleaPHP
FleaPHP6國外主流PHPmvc框架主要參考的PHP框架包括:CodeIgniter、CakePHP、ZendFramework、Symfony,Yii。CodeIgniter(CI框架)優(yōu)點(diǎn): 1.配置簡單,全部的配置使用PHP腳本來配置,執(zhí)行效率高;具有基本的路由功能,能夠進(jìn)行一定程度的路由;具有初步的Layout功能,能夠制作一定程度的界面外觀;數(shù)據(jù)庫層封裝的不錯,具有基本的MVC功能 2.快速簡潔,代碼不多,執(zhí)行性能高,PHP框架簡單,容易上手,學(xué)習(xí)成本低,文檔詳細(xì);自帶了很多簡單好用的library,框架適合小型應(yīng)用缺點(diǎn): 1.把Model層簡單的理解為數(shù)據(jù)庫操作 2.PHP框架略顯簡單,只能夠滿足小型應(yīng)用,略微不太能夠滿足中型應(yīng)用需要評價: 總體來說,拿CodeIgniter來完成簡單快速的應(yīng)用還是值得,同時能夠構(gòu)造一定程度的layout,便于模板的復(fù)用,數(shù)據(jù)操作層來說封裝的不錯,并且CodeIgniter沒有使用很多太復(fù)雜的設(shè)計(jì)模式,執(zhí)行性能和代碼可讀性上都不錯。至于附加的library也還不錯,簡潔高效。國外主流PHPmvc框架主要參考的PHP框架包括:Code7CakePHP優(yōu)點(diǎn): 1.CakePHP是最類似于RoR的PHP框架,包括設(shè)計(jì)方式,數(shù)據(jù)庫操作的ActiveRecord方式;設(shè)計(jì)層面很優(yōu)雅,沒有自帶多余的library,所有的功能都是純粹的框架,執(zhí)行效率還不錯;數(shù)據(jù)庫層的hasOne,hasMany功能很強(qiáng)大,對于復(fù)雜業(yè)務(wù)處理比較合適;路由功能,配置功能還不錯;自動構(gòu)建腳手架(scaffold)很強(qiáng)大;適合中型應(yīng)用;基本實(shí)現(xiàn)過了MVC每一層;具有自動操作命令行腳本功能; 2.文檔比較全,在國內(nèi)推廣的比較成功,大部分都知道CakePHP,學(xué)習(xí)成本中等
缺點(diǎn): 1.CakePHP非常嚴(yán)重的問題是把Model理解為數(shù)據(jù)庫層操作,嚴(yán)重影響了除了數(shù)據(jù)庫之外的操作能力 2.CakePHP的cache功能略顯薄弱,配置功能稍嫌弱;CakePHP不適合大型應(yīng)用,只適合中型應(yīng)用,小型應(yīng)用來說學(xué)習(xí)成本高了些評價: 總體來說CakePHP框架代表了PHP框架很重要的一個時代和代表,并且目前發(fā)揮著很重要的作用,不少自己寫的框架都模仿了CakePHP的方式,是個里程碑式的產(chǎn)品;CakePHP透露著RoR的敏捷開發(fā)方式和把數(shù)據(jù)庫操作認(rèn)為是唯一Model的設(shè)計(jì)思想,作為開發(fā)快速應(yīng)用和原型是絕好的工具;同樣,用來做Web2.0網(wǎng)站的開發(fā)框架,也是值得選擇的。CakePHP8ZendFramework優(yōu)點(diǎn): 1.官方出品,自帶了非常多的library,框架本身使用了很多設(shè)計(jì)模式來編寫,架構(gòu)上很優(yōu)雅,執(zhí)行效率中等;MVC設(shè)計(jì)中,比較簡潔,具有路由功能,配置文件比較強(qiáng)大(能夠處理XML和phpINI),各種library很強(qiáng)大,是所有PHP框架中各種功能最全面的,包括它不僅是一個PHP框架,更是一個大類庫(取代PEAR),這是它的主要特色;能夠直觀的支持除數(shù)據(jù)庫操作之外的Model層(比CodeIgniter和CakePHP強(qiáng)),并且能夠很輕易的使用Loader功能加載其他新增加的Class;Cache功能很強(qiáng)大,從前端Cache到后端Cache都支持,后端Cache支持Memcache、APC、SQLite、文件等等方式;數(shù)據(jù)庫操作功能很強(qiáng)大,支持各種驅(qū)動(適配器) 2.文檔很全,在國內(nèi)社區(qū)很成熟,并且目前不少Web2.0網(wǎng)站在使用,學(xué)習(xí)成本中等
缺點(diǎn): 1.MVC功能完成比較弱,View層簡單實(shí)現(xiàn)(跟沒實(shí)現(xiàn)一樣),無法很強(qiáng)大的控制前端頁面 2.沒有自動化腳本,創(chuàng)建一個應(yīng)用,包括入口文件,全部必須自己手工構(gòu)建,入門成本高 3.ZendFramework作為一個中型應(yīng)用框架問題不大,也能夠勉強(qiáng)作為大型應(yīng)用的PHP框架,但是作為一個很成熟的大型PHP框架來說,還需要一些努力評價: 作為官方出品的框架,ZendFramework的野心是可以預(yù)見的,想把其他框架擠走,同時封裝很多強(qiáng)大的類庫,能夠提供一站式的框架服務(wù),并且他們的開發(fā)團(tuán)隊(duì)很強(qiáng)大,完全足夠有能力開發(fā)很強(qiáng)大的產(chǎn)品出來,所以基本可以確定的是ZendFramework前途無量,如果花費(fèi)更多的時間去完善框架。同樣的,ZendFramework架構(gòu)本身也是比較優(yōu)雅的,說明Zend官方是有很多高手的,設(shè)計(jì)理念上比較先進(jìn),雖然有一些功能實(shí)現(xiàn)的不夠完善,比如View層,自動化腳本等等,這些都有賴于未來的升級。ZendFramework9Symfony優(yōu)點(diǎn) 1.Symfony是PHP框架中功能較強(qiáng)大的;它完整實(shí)現(xiàn)了MVC三層,能夠滿足一個項(xiàng)目下多個應(yīng)用的需要,并且每層可以定義自己的類庫,配置文件,layout;非常強(qiáng)大的命令行操作功能,包括建立項(xiàng)目、建立應(yīng)用、建立模塊、刷新緩存等等; 2.Symfony絕對是開發(fā)大型復(fù)雜項(xiàng)目的首選,因?yàn)槭褂昧薙ymfony,將大大節(jié)約開發(fā)成本,并且多人協(xié)作的時候,不會出現(xiàn)問題,在Project級別定義好基礎(chǔ)Class以后,任何模塊都能夠重用,大大復(fù)用代碼缺點(diǎn): 1.數(shù)據(jù)庫操作model采用了重量級的propel和creole,不過在我測試的版本中已經(jīng)把他們移到了addon里,可用可不用 2.緩存功能無法控制,每次開發(fā)調(diào)試總是緩存,需要執(zhí)行symfonycc,symfonyrc來清除和重建緩存; 3.效率不是很高,特別是解析模板和讀取配置文件的過程,花費(fèi)時間不少; 4.學(xué)習(xí)成本很高,并且國內(nèi)沒有成熟的社區(qū)和文檔,連中文手冊都沒有,相應(yīng)的要掌握所有功能,需要花費(fèi)比較多的時間評價: Symfony絕對是企業(yè)級的PHP框架,唯一能夠貌似能夠跟Java領(lǐng)域哪些強(qiáng)悍框架抗衡的東西;強(qiáng)悍的東西,自然學(xué)習(xí)復(fù)雜,但是相應(yīng)的對項(xiàng)目開發(fā)也比較有幫助,自然是推薦復(fù)雜的項(xiàng)目使用Symfony來處理,覺得是值得,后期的維護(hù)成本比較低,復(fù)用性很強(qiáng)。Symfony10深入淺出PHP框架Thinkphp實(shí)戰(zhàn)開發(fā)thinkphp基礎(chǔ)項(xiàng)目實(shí)戰(zhàn)111.Thinkphp簡介ThinkPHP的特點(diǎn)良好的跨平臺特性:
1)操作系統(tǒng)平臺(windows,linux,unix等)
2)服務(wù)器平臺(apache,iis,ngix等)URL上支持多種模式(4種),方便SEOpathinfo/xx/xx/xx/自動加載,動態(tài)編輯,節(jié)約系統(tǒng)效率(自動編譯—編譯緩存)強(qiáng)大的緩存機(jī)制(apc,db,memcache,shmop,xcache及file文件緩存等)良好的加載第三方類庫的功能,方便功能的擴(kuò)展(復(fù)用性非常強(qiáng))1.Thinkphp簡介ThinkPHP的特點(diǎn)121.Thinkphp簡介M數(shù)據(jù)表示模型類V模板C管理類調(diào)用并管理模型類和模板如: /index.php?m=user&a=regm代表模塊(控制器),a代表action動作(控制器里的方法)index.php稱為主入口文件(通常為單點(diǎn)接入方式)1.Thinkphp簡介M數(shù)據(jù)表示模型類132.Thinkphp版本和目錄結(jié)構(gòu)2.Thinkphp版本和目錄結(jié)構(gòu)142.Thinkphp版本和目錄結(jié)構(gòu)以下為庫目錄結(jié)構(gòu):Common公共的常用函數(shù)、配置及功能模塊Lang 語言文件夾(可用于多語言支持)Lib 框架庫文件夾
Think/Core 核心類庫(模型和控制等的基類) Think/Db 數(shù)據(jù)庫抽象層(用于多數(shù)據(jù)庫支持) Think/Exception thinkphp自帶的異常類 Think/Template thinkphp的模版引擎解析類 Think/Util 實(shí)用工具等(如:Think/Util/Cache緩存處理) (org目錄是核心包中不帶的內(nèi)容,只有完整包才有) org/Crypt 加密方式 org/Io(input/output) 對目錄和文件夾的處理 org/Net 網(wǎng)絡(luò)處理相關(guān)類 org/Util 時間處理、圖像處理、socket、rbac權(quán)限處理等實(shí)用工具類Mode 框架模式擴(kuò)展,用于擴(kuò)展框架底層功能,一般不需要了解Tpl 系統(tǒng)處理模版目錄(不是模板解析)Vendor第三方類庫2.Thinkphp版本和目錄結(jié)構(gòu)以下為庫目錄結(jié)構(gòu):152.thinkphp版本和目錄結(jié)構(gòu)第一個項(xiàng)目演示(嚴(yán)格區(qū)分大小寫):在Thinkphp文件夾外,寫一個index.php主入口文件,內(nèi)容為<?php define('THINK_PATH','./ThinkPHP/'); define('APP_NAME','home'); define(‘APP_PATH’,‘./home/’); //將創(chuàng)建home文件夾(并建立項(xiàng)目目錄結(jié)構(gòu)) require_onceTHINK_PATH.'ThinkPHP.php'; App::run();?>
2.thinkphp版本和目錄結(jié)構(gòu)第一個項(xiàng)目演示(嚴(yán)格區(qū)分162.Thinkphp版本和目錄結(jié)構(gòu)以下為項(xiàng)目目錄結(jié)構(gòu):(如:home文件夾)與開發(fā)人員密切相關(guān)的是:Common 項(xiàng)目中用到的公共文件Conf 放置項(xiàng)目配置文件Lang 項(xiàng)目是否自行實(shí)現(xiàn)多語言支持Lib/Action-C 用來放控制器類Lib/Model-M
用來放數(shù)據(jù)庫操作類 命名規(guī)范:UserAction.class.php,
UserModel.class.php 且文件中的類名須和文件名相同(去除.class.php) ps:可以在Lib目錄下自行創(chuàng)建Org目錄,并將庫目錄下的ORG目錄下的擴(kuò)展功能類文件拷到這里(當(dāng)然也可以自己寫擴(kuò)展功能類)2.Thinkphp版本和目錄結(jié)構(gòu)以下為項(xiàng)目目錄結(jié)構(gòu):(172.Thinkphp版本和目錄結(jié)構(gòu)Runtime(編譯及運(yùn)行時緩存等,里面的內(nèi)容由thinkphp自動生成)
包括: Cache 緩存(放置編譯出來的模板文件(頁面)) Data 放置與表相關(guān)的數(shù)據(jù)(數(shù)據(jù)庫字段-過時,不推薦使用)Logs 項(xiàng)目運(yùn)行日志Temp 放置文件緩存編譯緩存+文件緩存+頁面緩存+內(nèi)存緩存(解決數(shù)據(jù)庫海量讀的問題-memcache) 注:Runtime目錄下有~app.php和~runtime.php,這兩個文件時thinkphp的項(xiàng)目編譯文件-即編譯緩存(第一次項(xiàng)目運(yùn)行時編譯產(chǎn)生,第二次以后就不再編譯產(chǎn)生了,這樣加快了項(xiàng)目的執(zhí)行效率,類似于“緩存機(jī)制”)Tpl/default模版默認(rèn)default皮膚(一個文件夾存放一套皮膚)2.Thinkphp版本和目錄結(jié)構(gòu)Runtime(編譯及183.Thinkphp項(xiàng)目入口文件聲明項(xiàng)說明主入口文件index.php中,有以下幾個聲明項(xiàng):(在相關(guān)文檔手冊中—”架構(gòu)設(shè)計(jì)/入口文件”中可以找到).chm 1)THINK_PATH:定義了與thinkphp有關(guān)的核心框架文件目錄路徑 2)APP_PATH:應(yīng)用路徑(項(xiàng)目路徑),包含前臺應(yīng)用和后臺應(yīng)用 通常:我們將前臺(index.php)和后臺項(xiàng)目(admin.php)各單獨(dú)放在一個文件夾中 3)APP_NAME:應(yīng)用名稱,作用是在thinkphp加載時和在做權(quán)限管理時 ,控制前臺和后臺區(qū)分開
App::run()靜態(tài)方法在ThinkPHP/Lib/Think/Core/App.class.php3.Thinkphp項(xiàng)目入口文件聲明項(xiàng)說明主入口文件ind193.Thinkphp項(xiàng)目入口文件聲明項(xiàng)說明核心編譯文件(即Runtime目錄下的文件)(可以通過define(‘RUNTIME_PATH’,’./admin/temp’);來自定義Runtime的生成路徑) Runtime/~app.php和Runtime/~runtime.php 1)如果提示runtime錯誤,可以開啟保留空白和注釋和換行
define(‘STRIP_RUNTIME_SPACE’,false);2)在開發(fā)過程中,若不想生成相關(guān)的核心編譯文件:
define(‘NO_CACHE_RUNTIME’,true);(推薦) //將不會生成~runtime.php文件了~app.php,通常包含以下文件:項(xiàng)目配置文件(默認(rèn)配置,自定義項(xiàng)目配置(自定義配置>高于默認(rèn)配置)等)注:項(xiàng)目中代碼有任何改動后,建議將這兩個文件刪除(避免thinkphp編譯緩存)3.Thinkphp項(xiàng)目入口文件聲明項(xiàng)說明核心編譯文件(即204.URL路徑訪問和模塊控制器之間的關(guān)系LIB目錄存放控制器和模型,控制器在URL中的訪問規(guī)則是:/testproj/主入口文件/模塊名(控制器類名)/動作名(方法名)thinkphp規(guī)定:
所有的主入口文件默認(rèn)訪問index控制器,且所有的控制器默認(rèn)是去找index方法(動作)
以后臺主入口文件admin.php為例:/testproj/admin.php/index/reg
注: 1)控制器類名必須是與文件名相同(去除.class.php),首字母必須大 寫,必須后面加上Action,且必須要繼承Action類 2)方法名通常須是public(默認(rèn)),否則thinkphp無法正常解析
4.URL路徑訪問和模塊控制器之間的關(guān)系LIB目錄存放控制214.URL路徑訪問和模塊控制器之間的關(guān)系四種路徑訪問模式(URL_MODEL):可通過Conf/config.php目錄下修改為(0,1,2,3),如:returnarray('URL_MODEL'=>0) 1)0普通模式: admin.php?a=reg&m=shop (get方式,m和a的順序可以換)
2)1pathinfo模式(默認(rèn)):
admin.php/模塊/方法 3)2rewrite重寫模式(偽靜態(tài)模式): 自己可以寫相關(guān)的rewrite規(guī)則,也可 以使用thinkphp自帶的rewrite規(guī)則 如:可將admin.php/模塊/方法變成:/模塊/方法
4)3兼容模式:index.php?s=/user/g
(當(dāng)服務(wù)器上不支持pathinfo時,可以自動識別為兼容模式來處理) 注:apache配置文件httpd.conf可通過把AcceptPathInfoOff配置項(xiàng)加入 <Directory/></Directory>中來關(guān)閉apache對pathinfo模式的支持
4.URL路徑訪問和模塊控制器之間的關(guān)系四種路徑訪問模式(U224.URL路徑訪問和模塊控制器之間的關(guān)系關(guān)于rewrite重寫模式(便于SEO,搜索引擎優(yōu)化):
1)確認(rèn)apache的rewrite模塊是否已經(jīng)打開(httpd.conf配置中)
#LoadModulerewrite_modulemodules/mod_rewrite.so,將#去掉
2)將AllowOverrideNone
改成All
(httpd.conf配置中所有處)
3)在與主入口文件相同目錄下,新建一個.htaccess文件(apache的規(guī)定),
將url重寫規(guī)則寫入其中(url重寫規(guī)則,可參考thinkphp手冊->開發(fā)指南->控制器->URL重寫)
注: 開啟url重寫,無論是被重寫的,還是沒被重寫的,都能夠通過原有路徑進(jìn)行訪問(rewrite模式會加大服務(wù)器性能的消耗)4.URL路徑訪問和模塊控制器之間的關(guān)系關(guān)于rewrite235.pathinfo的兩種模式與模板view和控制器之間的關(guān)系關(guān)于pathinfo的兩種模式:在Conf/config.php配置文件中進(jìn)行配置:1)普通模式(必須在前面加上/m/模塊/a/動作,且順序可改變) ‘URL_MODEL’=>1, ‘URL_PATHINFO_MODEL’=>1
如:http://localhost/home/index.php/m/user/a/index/username/xxx/
(/username/xxx為get的傳值)2)智能識別模塊和操作模式(默認(rèn))--模塊和動作的順序就不能隨意修改了 ‘URL_MODEL’=>1, ‘URL_PATHINFO_MODEL’=>2
如:http://localhost/home/index.php/user/index/username/xxx/另外如設(shè)置:‘URL_PATHINFO_DEPR’=>’-’ 則URL形式為:http://localhost/home/index.php/user-index-username-xxx(不推薦)
5.pathinfo的兩種模式與模板view和控制器之間245.pathinfo的兩種模式與模板和控制器之間的關(guān)系 模版v和控制器c之前的關(guān)系,模板輸出類似于smarty($this->display())原則(即文件結(jié)構(gòu)關(guān)系):
Tpl/default/文件夾下面一個控制器新建一個文件夾/每個方法一個模版文件 如: Tpl/default/User/index:在UserAction控制器的index方法中$this->display()就可以顯示Tpl/default中User文件夾下的index.html模版文件 (也可像smarty一樣,通過$this->assign(‘變量名’,’變量值’)進(jìn)行模版的傳值或修改定界符等,詳見thinkphp手冊的模版指南){$變量名}5.pathinfo的兩種模式與模板和控制器之間的關(guān)系 模255.pathinfo的兩種模式與模板和控制器之間的關(guān)系訪問模版文件的方法(6種):1.模板相對路徑方式:Tpl 1)直接調(diào)用: $this->display(); 2)同控制器中調(diào)用其他模版: $this->display(“gg”); 3)跨控制器調(diào)用模板: $this->display(‘index:tt’); 4)跨皮膚(跨主題)調(diào)用模板: $this->display(‘skinName@index:tt’);
2.全路徑輸出方式(加載檔的位置全部以主入口檔定位):
5)相對全路徑調(diào)用模板 $this->display(‘./Public/ss.html’);//普適性 (通常可以將前后臺公共的東西放置在與主入口同目錄的Public目錄下) 6)完全全路徑調(diào)用(磁盤路徑) $this->display(‘d:/xx/yy/hh.html’);-不推薦另外display參數(shù): 模板位置,編碼,文件的mime類型
如:$this->display(‘./Public/ss.xml’,‘gb2312’,‘text/xml’);5.pathinfo的兩種模式與模板和控制器之間的關(guān)系訪問266.系統(tǒng)常量與模板替換常用的系統(tǒng)常量定義(詳見手冊8.1.1節(jié))__ROOT__(跨前后臺): 代表網(wǎng)站根目錄地址(范圍最大的,具有普適性)__APP__(跨控制器): 代表當(dāng)前項(xiàng)目的入口文件的地址__URL__(同控制器下訪問不同的action): 代表當(dāng)前操作所在模塊的地址__ACTION__: 代表當(dāng)前操作方法地址__SELF__: 代表當(dāng)前URL地址(帶有參數(shù)傳遞)__CURRENT__: 代表當(dāng)前模塊的模板目錄ACTION_NAME: 代表操作名稱APP_PATH: 代表當(dāng)前項(xiàng)目目錄APP_NAME: 代表當(dāng)前項(xiàng)目名稱APP_TMPL_PATH: 代表當(dāng)前項(xiàng)目模板目錄APP_PUBLIC_PATH: 代表當(dāng)前項(xiàng)目模板的公共文件目錄CACHE_PATH: 代表當(dāng)前項(xiàng)目緩存目錄CONFIG_PATH: 代表項(xiàng)目配置文件COMMON_PATH: 代表項(xiàng)目的公共文件目錄DATA_PATH: 項(xiàng)目數(shù)據(jù)文件目錄(thinkphp會自動緩存與表相關(guān)的結(jié)構(gòu)信息)
6.系統(tǒng)常量與模板替換常用的系統(tǒng)常量定義(詳見手冊8.1276.系統(tǒng)常量與模板替換另還有一些,可供參考并使用: HTML_PATH IS_CGI IS_WIN LIB_PATH LOG_PATH LANG_PATH MEMORY_LIMIT_ON MAGIC_QUOTES_GPC TEMP_PATH TMPL_PATH THINK_PATH THINK_VERSION TEMPLATE_NAME TEMPLATE_PATH VENDOR_PATH(擴(kuò)展目錄)WEB_PUBLIC_PATH(公共文件目錄) (請自行查看thinkphp手冊描述以上系統(tǒng)常量的功能)
6.系統(tǒng)常量與模板替換另還有一些,可供參考并使用:286.系統(tǒng)常量與模板替換1.系統(tǒng)常量的作用模版替換:這些系統(tǒng)常量可以寫在模板當(dāng)中
如:<formaction=“”>中action的取值 最好寫成__URL__/add(即不要寫死) 其代表的意思是訪問當(dāng)前模塊下的add方法,要注意這種常見用法2.當(dāng)然也可以自定義常量來進(jìn)行模板替換,參考手冊5.4,寫在home/Conf/config.php
‘TMPL_PARSE_STRING’=>array( ‘__GOOGLE__’=>’’, ),6.系統(tǒng)常量與模板替換1.系統(tǒng)常量的作用模版297.調(diào)試模式和日志處理調(diào)試模式(開發(fā)過程中建議開啟調(diào)試模式) 如何開啟調(diào)試模式:在配置文件Conf/config.php中‘APP_DEBUG’=>true
系統(tǒng)默認(rèn)的調(diào)試模式的配置:在庫文件夾thinkphp下的Common/debug.php 其中’DB_FIELDS_CACHE’=>false表示關(guān)閉字段緩存 (開啟字段緩存,將在新加字段后,不識別新的字段,因此建議開發(fā)階段關(guān)閉字段緩存) 在ACTION中可以自定義TRACE,$this->trace(‘xxxxxx’);//須為字符串 //信息將顯示在頁面trace信息中7.調(diào)試模式和日志處理調(diào)試模式(開發(fā)過程中建議開啟調(diào)試模307.調(diào)試模式和日志處理2.日志處理系統(tǒng)默認(rèn)的日志處理的配置:/thinkphp/lib/think/core/log.class.php //里面包含了日志的各個級別開啟日志記錄(依賴于調(diào)試模式的開啟):在配置文件Conf/config.php中‘LOG_RECORD’=>true‘LOG_RECORD_LEVEL’=>array(‘EMERG’,‘ALERT’,…)//多個級別以,隔開日志記錄方式: 默認(rèn)為文件方式,記錄到/home/Runtime/Logs(使用文件方式的日期時間格式)7.調(diào)試模式和日志處理2.日志處理318.數(shù)據(jù)庫配置與連接 Thinkphp的數(shù)據(jù)庫抽象層類(/ThinkPHP/Lib/Think/Db/Db.class.php),封裝了mysqlmssqlpgSql,sqlLite,Oracle,ibase等數(shù)據(jù)庫的抽象操作及Pdo的支持,我們只需要利用thinkphp已經(jīng)抽象并封裝好的Db類所提供的方法來進(jìn)行增刪改查就可以了 數(shù)據(jù)庫的連接方式(2種): 1.采用配置文件方式(推薦) 連接數(shù)據(jù)庫,可以在配置文件Conf/config.php中,進(jìn)行數(shù)據(jù)庫的常用連接設(shè)置,如: returnarray( ‘DB_TYPE’=>‘mysql’,//數(shù)據(jù)庫類型 ‘DB_HOST’=>‘localhost’,//服務(wù)器地址 ‘DB_NAME’=>‘dbname’,//數(shù)據(jù)庫名 ‘DB_USER’=>‘root’,//用戶名 ‘DB_PWD’=>”,//密碼 ‘DB_PORT’=>3306,//端口
‘DB_PREFIX’=>‘think_’,//數(shù)據(jù)庫表前綴(推薦),設(shè)置后建表時表名須有前綴
‘DB_FIELDS_CACHE’=>true,//啟用字段緩存(不推薦) )
注:Common/convention.php,thinkphp常用的所有默認(rèn)配置8.數(shù)據(jù)庫配置與連接 Thinkphp的數(shù)據(jù)庫抽象層類(/328.數(shù)據(jù)庫配置與連接2.手動連接方式中(控制器方法中) 可以在控制器方法中通過,“dsn數(shù)據(jù)庫連接方式”,來進(jìn)行數(shù)據(jù)庫的手動連接 $dsn=‘mysql://username:password@localhost:3306/dbname’; $db=newDb($dsn);或 $dsn=array( ‘dbms’=>’mysql’, ‘username’=>’username’, ‘password’=>’password’, ‘hostname’=>’localhost’ ‘hostport’=>’3306’, ‘database’=>’dbname’, ); $db=newDb($dsn);8.數(shù)據(jù)庫配置與連接2.手動連接方式中(控制器方法中)338.數(shù)據(jù)庫配置與連接關(guān)于主從數(shù)據(jù)庫(需要進(jìn)行服務(wù)器的集群)/*數(shù)據(jù)庫設(shè)置–配置方式*/在配置文件Conf/config.php中,如:returnarray( ‘DB_TYPE’=>‘mysql’,//數(shù)據(jù)庫類型 ‘DB_HOST’=>‘localhost,,′,//服務(wù)器地址,多個以,分隔 ‘DB_NAME’=>‘dbname’,//數(shù)據(jù)庫名(相同定義一個就可以了,若不同的多個用,隔開) ‘DB_USER’=>‘root,repuser,repuser’,//用戶名 ‘DB_PWD’=>‘test123,123456,123456’,//密碼 ‘DB_PORT’=>3306,//端口 ‘DB_PREFIX’=>‘think_’,//數(shù)據(jù)庫表前綴 ‘DB_CHARSET’=>‘utf8’,//數(shù)據(jù)庫編碼默認(rèn)采用utf8 ‘DB_DEPLOY_TYPE’=>1,//數(shù)據(jù)庫部署方式:0集中式(單一服務(wù)器),1分布式(主從服務(wù)器) ‘DB_RW_SEPARATE’=>true,//數(shù)據(jù)庫讀寫是否分離主從式有效讀寫時, //默認(rèn)第一臺是用來寫,其它用來讀(“讀”通常是海量的)) 注: thinkphp提供了大C(‘xxx’)方法來讀取配置文件Conf/config.php中的配置項(xiàng)的值 如:C(‘DB_HOST’)可以方便的讀取數(shù)據(jù)庫主機(jī)信息并用到控制器的方法或模版中8.數(shù)據(jù)庫配置與連接關(guān)于主從數(shù)據(jù)庫(需要進(jìn)行服務(wù)器的集群)349.數(shù)據(jù)庫實(shí)例化模型數(shù)據(jù)庫實(shí)例化的方式(4種)1)直接實(shí)例化thinkphp自帶的模型類(/ThinkPHP/Lib/think/Core/Model.class.php) 即newModel(‘表名’);//這里’表名’,不加表前綴 如:$user=newModel(‘User’);//think_user表 $list=$user->select();//模型類的select()方法,模型查詢所有記錄,并返回一個二維數(shù)組 dump($list);//thinkphp自帶dump封裝方法,輸出$list的信息也可以采用便捷方法M(‘User’),大M方法;等價于$user=newModel(‘User’);2)數(shù)據(jù)庫操作擴(kuò)展模型類 如:在/home/lib/Model/ExtModel.class.php中 ClassExtModelextendsModel{ publicfunctiongg(){…..} } $user=newExtModel(‘user’),等價于$user=M(’user’,‘ExtModel’),就可以調(diào)用通過Model方法以外的用戶自定義模型類的方法了,如gg()方法9.數(shù)據(jù)庫實(shí)例化模型數(shù)據(jù)庫實(shí)例化的方式(4種)359.數(shù)據(jù)庫實(shí)例化模型3)利用命名規(guī)則,自定義與表名相同的模型類(適用于“表專屬”業(yè)務(wù)邏輯)如:在/home/lib/Model/UserModel.class.php中(這里的UserModel就是處理User表的模型) ClassUserModelextendsModel{ 。。。。 } $user=newUserModel();//無需傳表名 也可以采用類似的便捷方法D(‘User’),大D方法;等價于$user=newUserModel();注: D()方法與“newUserModel()”方式不同的是:只能實(shí)例一次9.數(shù)據(jù)庫實(shí)例化模型3)利用命名規(guī)則,自定義與表名相同的369.數(shù)據(jù)庫實(shí)例化模型4)實(shí)例化一個空模型
(普適性,實(shí)例化時不指明是操作哪一張表)
如:$user=newModel();//或$user=M(); $list=$user->query(“select*fromthink_user”); dump($list);
注: a).該方式是類似傳統(tǒng)sql方式,必須用完整的表名,不能省表前綴名 b).增刪改用execute()方法,查詢用query()方法
9.數(shù)據(jù)庫實(shí)例化模型4)實(shí)例化一個空模型3710.CURD與連貫操作CURD(create(add),update,read,delete,(save))先看看thinkphp中基本的查詢方式:(thinkphp提供3種方式的查詢) 1)find():每次只查詢一條記錄,返回一個一維數(shù)組
2)select():將該表中的所有信息讀取出來,返回一個二維數(shù)組
3)findAll():select()方法的別名如: $user=M(‘user’);$list=$user->select();dump($list);10.CURD與連貫操作3810.CURD與連貫操作在模板中遍歷數(shù)據(jù): $list可以通過$user->assign(‘a(chǎn)list’,$list)分配到模版中,并在模版中通過thinkphp專用的<volist>標(biāo)簽進(jìn)行select()返回的二維數(shù)組的遍歷(類似于smarty的遍歷),而find()返回的一維數(shù)組可直接遍歷,無需用到<volist>標(biāo)簽
如: <volistname=‘a(chǎn)list’id=‘xx’>
{$xx[‘字段名1’]},{$xx[‘字段名2’]},….<br> </volist>10.CURD與連貫操作3910.CURD與連貫操作以CURD操作為例介紹連貫操作(了解):關(guān)于連貫操作,格式如下(請參看手冊5.3.0)
$user->xxx->yyy->…..->(增add刪delete改save/查)注: 1)兩端的位置必須固定不變 2)中間的xxx,yyy等為連貫操作(順序可以調(diào)換),連貫操作方法名類似于sql語法10.CURD與連貫操作以CURD操作為例介紹連貫操作(了4010.CURD與連貫操作以下以增刪改及查為例,介紹連貫操作:1.增刪改操作,通??梢院蚫ata()方法結(jié)合使用: 1)add()增 $a[‘username’]=‘gg’; //以字段作為數(shù)組關(guān)聯(lián)下標(biāo) $a[‘password’]=md5(‘456’);//采用md5()將密碼進(jìn)行加密 $list=$user->add($a);或$list=$user->data($a)->add(); //將數(shù)組$a中的數(shù)值增加進(jìn)數(shù)據(jù)庫(id自動增長時,無需指明) 或 $list=$user->add($_GET)或$list=$user->data($_GET)->add(); //將$_GET數(shù)組(如:表單get方式)中的值加進(jìn)數(shù)據(jù)庫 (增加操作返回的$list,表示增加的記錄的主鍵id值)
10.CURD與連貫操作以下以增刪改及查為例,介紹連貫操作4110.CURD與連貫操作 2)delete()刪 a)$list=$user->delete(‘5’); //直接傳入主鍵id b)$id=3;$list=$user->where(“id>$id”)->limit(2)->delete() //可加where,limit語法 c)$list=$user->where(‘id>5’)->order(‘iddesc’)->delete() //也可倒序等語法 (刪除操作返回的$list,表示受影響的行數(shù))
10.CURD與連貫操作4210.CURD與連貫操作3)save()改 $a[‘id’]=‘4’; $a[‘password’]=‘123’; $list=$user->data($a)->save();或$list=$user->save($a); //將id為4的記錄,password字段的值改為’123’ (修改操作返回的$list,表示受影響的行數(shù))注: 若之前用了create()方法,事先已將數(shù)據(jù)壓入$user后,則可以將之前的 $user->add()改為$user->save()了,前提是采用了create()方法且是表單post方式)
10.CURD與連貫操作4310.CURD與連貫操作另外,對單條記錄的定值修改,thinkphp還提供了一些簡化的方法: a)對于數(shù)字型字段的增加--setInc(),減少--setDec()操作: setInc(‘?dāng)?shù)字型字段’,’where條件’,[增加的值]);//默認(rèn)為增加1如: $list=$user->setInc(‘price’,’id=2’,3);
b)單條記錄快速設(shè)置各個字段的值:setField()方法如: $user->where(‘id=1’) ->setField(array(‘username’,’password’),array(‘test’,’123’)) //第一個參數(shù)為字段數(shù)組,第二個參數(shù)為值數(shù)組
10.CURD與連貫操作4410.CURD與連貫操作2.查詢: $user->where(‘id>2’)->order(‘iddesc’)->limit(‘2’) ->field(‘id,username’)->select();多表查詢: $user->field(‘u.idasuid,p.idaspid’) ->table(‘think_useru,think_productp’) ->where(‘u.id=p.id’) ->select();注:對于復(fù)雜的單表及多表(增刪改/查)等操作,這種連貫操作方式?jīng)]有傳統(tǒng)空模型sql方式方便10.CURD與連貫操作2.查詢:4511.驗(yàn)證碼和分頁1.驗(yàn)證碼: thinkPHP中驗(yàn)證碼的實(shí)現(xiàn)是依賴于圖形庫文件(/ThinkPHP/Lib/ORG/Util/Image.class.php)
即thinkphp核心庫中沒有對圖形的支持,因此需要在控制器相應(yīng)方法中,使用import進(jìn)行導(dǎo)入如: (import(‘ORG.Util.Image’)) 或 import(‘@.Org.Image’); //@代表當(dāng)前項(xiàng)目的Org目錄,區(qū)分大小寫(這就需要將/ThinkPHP/Lib/ORG/Util/Image.class.php拷貝到當(dāng)前項(xiàng)目的Org目錄中)11.驗(yàn)證碼和分頁1.驗(yàn)證碼:4611.驗(yàn)證碼和分頁相應(yīng)的含有驗(yàn)證碼的模版文件代碼如下:<formaction="__URL__/add"method="POST"> 用戶名<inputtype="text"name="uname"><br> 密碼<inputtype="password"name="upass"><br> 重復(fù)密碼<inputtype="password"name="repassword"><br> 驗(yàn)證碼:<inputtype="text"name="verify"> <imgsrc="__APP__/common/verify"
onclick="show(this)"> <inputtype="submit"value="提交"> <script> functionshow(obj){ //點(diǎn)擊改變驗(yàn)證碼 obj.src="__APP__/common/verify/random/"+Math.random(); } </script></form>11.驗(yàn)證碼和分頁相應(yīng)的含有驗(yàn)證碼的模版文件代碼如下:4711.驗(yàn)證碼和分頁控制器中的代碼如下:<?phpclassCommonActionextendsAction{ functionverify(){ import('ORG.Util.Image'); //代表當(dāng)前項(xiàng)目的LIB文件夾 //import('@.Org.Image'); Image::buildImageVerify();//英文驗(yàn)證碼 //或Image::buildImageVerify(10,5,gif,90,30,'verify'); //Image::GBVerify(); //中文驗(yàn)證碼
//中文驗(yàn)證碼將Image.class.php中GBVerify方法中的msubstr改成String::msubstr同時復(fù)制默認(rèn)thinkphp支持的字體simhei.ttf到Image.class.php同級文件夾下 }}?>驗(yàn)證碼的驗(yàn)證: 驗(yàn)證碼保存在session當(dāng)中,名稱$_SESSION[‘verify’],且為md5加密后的, 因此通常需要將用戶輸入的驗(yàn)證碼進(jìn)行md5加密后,再和$_SESSION[‘verify’] 進(jìn)行比對判定即可.
11.驗(yàn)證碼和分頁控制器中的代碼如下:4811.驗(yàn)證碼和分頁2.分頁:控制器中的代碼如下:<?php classUserActionextendsAction{ functionindex(){ import(‘ORG.Util.Page’);//同樣需要導(dǎo)入,才能執(zhí)行 $user=M(“user”); $totalCount=$user->count(); //總記錄數(shù) $page=newPage($totalCount,5);//如每頁5條記錄 $show=$>show(); $list=$user->limit(“$>firstRow,$>listRows”)->select();//“分頁”顯示 $this->assign(‘a(chǎn)list’,$list); $this->assign(“page”,$show); //模版使用{$page},即可“控制分頁”顯示 $this->display(); }}?>
注:$>firstRow和$>listRows是在構(gòu)造$page時,就自動設(shè)置好了11.驗(yàn)證碼和分頁2.分頁:4911.驗(yàn)證碼和分頁2.分頁:相應(yīng)的模版中的代碼如下:<volistname=‘a(chǎn)list’id=‘vo’> {$vo[‘id’]},{$vo[‘username’]},{$vo[‘password’]}<br></volist><br>{$page}另: 關(guān)于“控制分頁”的顯示樣式,可以$>show()之前,通過$>setConfig()方法來進(jìn)行樣式的改變 如: $>setConfig(‘header’,’個用戶’); //參數(shù)有prev,next,first,last或theme進(jìn)行自定制等 (可參考Page.class.php文件末尾的相關(guān)信息)11.驗(yàn)證碼和分頁2.分頁:5012.多語言支持和多模版支持多語言支持:
在系統(tǒng)目錄中/ThinkPHP/Lang/提供了系統(tǒng)提示及報(bào)錯情況顯示的語言支持文件,默認(rèn)為zh-cn.php,簡體中文;而通常網(wǎng)站項(xiàng)目的多語言支持,通常需要放在/home/Lang文件夾下 1)在/home/Lang下實(shí)現(xiàn)建立多個文件夾 如:zh-cn,en-us,zh-tw等等 再在每個文件夾中,寫上common.php,在其中 <? <? returnarray( returnarray( ‘welcome’=>’你好’, ‘welcome’=>’howdoyoudo?’,
‘hh’=>’哈哈’, ‘hh’=>’haha’, ) ) ?> ?>zh-cn文件夾下common.php en-us文件夾下common.php 12.多語言支持和多模版支持多語言支持:5112.多語言支持和多模版支持多語言支持:
2)在/home/Conf/config.php配置文件中,加上如下配置項(xiàng):
‘LANG_SWITCH_ON’=>true, //是否開啟多語言支持
如何顯示多語言支持: a).模版中的多語言支持 <ahref=‘?l=zh-cn’>簡體中文</a><ahref=‘?l=en-us’>english</a>
{$Think.lang.welcome},{$Think.lang.hh} 點(diǎn)擊以上兩個連接,就可以實(shí)現(xiàn)下面兩個語言配置標(biāo)示的多語言切換了
b).模型或控制器代碼中的多語言支持: {%welcome}或{%hh}
12.多語言支持和多模版支持多語言支持:5212.多語言支持和多模版支持多模版(多皮膚)支持: /home/Tpl/除了default文件夾(默認(rèn)皮膚),新建一個或多個文件夾 (也就是多套不同的皮膚支持),每個文件夾下單獨(dú)采用不同樣式的模版文件 1)在/home/Conf/config.php配置文件中,加上如下配置項(xiàng):
‘TMPL_SWITCH_ON’=>true, //是否開啟多模版支持
2)如何顯示實(shí)現(xiàn)多皮膚: 在某個皮膚下,如default的Index文件夾的index.html中,也采用鏈接進(jìn)行切換 <ahref=‘?t=red’>紅色風(fēng)格<a> <ahref=‘?t=green’>綠色風(fēng)格<a> <ahref=‘?t=default’>默認(rèn)風(fēng)格<a>//t為template的簡寫 (red,green,default為各個皮膚的文件夾名) 點(diǎn)擊鏈接就可在不同風(fēng)格皮膚下進(jìn)行切換了
12.多語言支持和多模版支持多模版(多皮膚)支持:5313.ThinkPHP中的緩存管理方式緩存技術(shù)在百萬級訪問網(wǎng)站中是非常重要的:常見的有 apc,memcache,xcache,sqlite,file等等以memcache(內(nèi)存方式的緩存)為例: 可在Windows或Linux下安裝memcache,直接用php實(shí)現(xiàn)內(nèi)存方式的緩存(注:php.ini中加入extension=php_memcache.dll使得php支持memcache)ThinkPHP中啟用Memcache緩存是比較簡單的 (ThinkPHP/Lib/Think/Util/Cache目錄下為thinkphp支持的所有緩存形式)
1)在項(xiàng)目配置文件/home/Conf/config.php添加以下配置信息 其中,Memcache默認(rèn)端口是11211,設(shè)置緩存為Memcache
'DATA_CACHE_TYPE'=>'Memcache', 'MEMCACHE_HOST'=>'tcp://:11211', 'DATA_CACHE_TIME'=>'3600',
注:文件型緩存,thinkphp一般放在/home/Runtime/Temp目錄下13.ThinkPHP中的緩存管理方式緩存技術(shù)在百萬級訪問5413.ThinkPHP中的緩存管理方式 2)配置好之后,thinkphp提供的簡便動態(tài)緩存的大S()--推薦
方法來處理緩存:
如:S(‘緩存變量名’,’變量值’[,’緩存時間’,’緩存類型’]) 若之前設(shè)置了統(tǒng)一的緩存時間和緩存類型,就可就不加 如: $user=M(‘user’); $list=S(‘list’); //讀出 if(empty($list)){//或!isset() $list=$user->select(); //若之前沒有設(shè)置,就從數(shù)據(jù)庫讀出
S(‘list’,$list); //并設(shè)置入緩存服務(wù)器 } $this->assign(‘a(chǎn)list’,$list); //否則就直接使用緩存(memcache在內(nèi)存)中的數(shù)據(jù)另一種方式:
import(“@.org.CacheMemcache”);//將CacheMemcache文件拷貝到項(xiàng)目庫目錄org文件夾下
$cache
=
Cache::getInstance();//或$cache
=
Cache::getInstance(‘緩存方式’,’緩存參數(shù)’); $cache->set(“uid”,‘1231’);$cache->get(“uid”); //設(shè)置和獲取 $cache->rm(“uid”);$cache->clear(); //rm清除單個,clear清除所有13.ThinkPHP中的緩存管理方式 2)配置5514.ThinkPHP中的RBACRBAC:(Role-basedAccessControl)--基于角色(組)的權(quán)限控制,廣泛應(yīng)用于前臺用戶權(quán)限管理它是thinkphp提供的擴(kuò)展功能(/ThinkPHP/lib/ORG/Util/RBAC.class.php)安全及權(quán)限管理,一般有以下一些內(nèi)容: 1.安全攔截器(如:thinkphp防跳墻等) 2.認(rèn)證管理器(識別不同的身份用,用戶的用戶名、密碼及權(quán)限是否在授權(quán)范圍內(nèi)) 3.決策訪問管理器(即時模式,登陸模式)--通常與認(rèn)證管理器協(xié)同運(yùn)行 4.運(yùn)行身份管理(單身份管理或多身份管理)在ThinkPHP中,權(quán)限控制基于單身份管理(暫不支持多身份管理),其判斷流程為: 1)判斷當(dāng)前的操作是否需要認(rèn)證 2)如果需要認(rèn)證(判斷用戶是否登錄——跳轉(zhuǎn)委托認(rèn)證管理器驗(yàn)證身份, 判斷用戶是否有權(quán)限——沒有就跳出) 3)委托認(rèn)證來驗(yàn)證用戶身份 4)獲取該用戶的權(quán)限列表 5)判斷用戶是否有權(quán)限訪問 注:在ThinkPHP的RBAC,主要分成數(shù)據(jù)庫設(shè)計(jì)和模塊代碼兩個部分,其中數(shù)據(jù)庫設(shè)計(jì)部分是難點(diǎn),模塊代碼部分通常在thinkphp完整包有Example示例代碼,相對反而容易一些14.ThinkPHP中的RBACRBAC:(Role-5614.ThinkPHP中的RBAC
數(shù)據(jù)庫設(shè)計(jì)部分:其步驟為:1.首先自己創(chuàng)建一張think_user表(即用戶表:用戶可以是admin或普通用戶) 該表基本的只需要3個字段(id-主鍵自增,username-用戶名,password-密碼)
(若用戶有其他一些無需RBAC驗(yàn)證的信息的字段,可自行增加)
創(chuàng)建表操作完成后,可以添加兩條用戶記錄,即建立兩個用戶(admin和user)2.thinkphp的RBAC功能所用到的表結(jié)構(gòu),無需自己設(shè)計(jì),只需要找到/ThinkPHP/lib/ORG/Util/RBAC.class.php文件中,拷貝4個相關(guān)創(chuàng)建表代碼即可
(注:think_access表中,需要在最后添加一個int類型的pid字段)
14.ThinkPHP中的RBAC數(shù)據(jù)庫設(shè)計(jì)部分:5714.ThinkPHP中的RBAC
4個表的含義及設(shè)計(jì)時的注意事項(xiàng)如下: 1)think_role:用戶角色表(也就是用戶組表) 一般需要填寫(2個字段): name字段:組的名字(admin或user)管理員組或普通用戶組 status字段:狀態(tài)信息,一般設(shè)置為1,表示開啟狀態(tài) 注:pid字段表示是否有父節(jié)點(diǎn)id(有父節(jié)點(diǎn)id,就可以讓某個組屬于另一個組), 該表中該字段可不指明(默認(rèn)為空即可)
這里我們可以先添加兩條記錄,即建立兩個角色(也就是兩個組admin和user)
2)think_role_user:用戶和組的對應(yīng)關(guān)系表
接著我們將之前添加的兩個用戶和兩個組進(jìn)行對應(yīng)
insertintothink_role_user(role_id,user_id)values(1,1),(2,2)14.ThinkPHP中的RBAC 4個表的含義及設(shè)計(jì)時5814.ThinkPHP中的RBAC
4個表的含義及設(shè)計(jì)時的注意事項(xiàng)如下: 3)think_node:節(jié)點(diǎn)表 什么是節(jié)點(diǎn):
節(jié)點(diǎn)就是(1項(xiàng)目(APP_NAME)、2模塊、3方法,等級分別是123)之間的關(guān)系
一般比須讓用戶先能訪問項(xiàng)目,接著才能訪問項(xiàng)目下的模塊以及模塊下的方法
需要所有的節(jié)點(diǎn)都可控制,則需要將節(jié)點(diǎn)全部要添加到節(jié)點(diǎn)表 該表中一般需要填寫(5個字段):
id字段:(可以讓其自增) name字段:組的名字(admin或user)管理員組或普通用戶組 status字段:狀態(tài)信息,一般設(shè)置為1,表示開啟狀態(tài) pid字段:父節(jié)點(diǎn)的id字段的數(shù)值 level字段:節(jié)點(diǎn)等級,項(xiàng)目為1,模塊為2,方法為3
14.ThinkPHP中的RBAC4個表的含義及5914.ThinkPHP中的RBAC 接著添加所有想進(jìn)行權(quán)限控制的節(jié)點(diǎn)信息的記錄: (可自行設(shè)計(jì),無須一定按以下規(guī)則) INSERTINTOthink_node(id,name,title,status,remark,sort,pid,level) VALUES(1,'admin',NULL,1,NULL,NULL,0,1), (2,'user',NULL,1,NULL,NULL,1,2), (3,'index',NULL,1,NULL,NULL,1,2), (4,'index',NULL,1,NULL,NULL,2,3), (5,'del',NULL,1,NULL,NULL,2,3), (6,'add',NULL,1,NULL,NULL,2,3), (7,'update',NULL,1,NULL,NULL,2,3), (8,'index',NULL,1,NULL,NULL,3,3), (9,'del',NULL,1,NULL,NULL,3,3), (10,'add',NULL,1,NULL,NULL,3,3), (11,'update',NULL,1,NULL,NULL,3,3); 這里admin是項(xiàng)目(APP_NAME應(yīng)用程序名稱),自然是沒有pid(0),level為
1
而user和index是模塊,他們的pid為1,自身level為2
以此類推,就可以自行設(shè)定出各個節(jié)點(diǎn)了14.ThinkPHP中的RBAC 接著添加所有想進(jìn)行權(quán)限6014.ThinkPHP中的RBAC 4)think_access:用戶組訪問控制表(角色訪問控制表)
--體現(xiàn)以角色為基礎(chǔ)的特征
控制角色組能訪問的權(quán)限,即控制著各個角色(即組),是否能夠訪問某個項(xiàng)目,某個模塊及某個方法;在access表當(dāng)中有的節(jié)點(diǎn),有的用戶組,才能訪問,沒在access表中就不能訪問。 原則:
一定要先能訪問項(xiàng)目,才能訪問模塊,最后才能訪問方法 該表中一般需要填寫(4個字段):
role_id字段:用戶組的id,可以去think_role表中去確定 node_id字段:節(jié)點(diǎn)id,可以去think_node表中去確認(rèn) level字段:節(jié)點(diǎn)的等級,可以去think_node表中去確認(rèn) pid字段:父節(jié)點(diǎn)id,可以去think_node表中去確認(rèn)14.ThinkPHP中的RBAC 4)think_acc6114.ThinkPHP中的RBAC 可添加記錄作以下user組的訪問控制,如: INSERTINTOthink_access(role_id,node_id,level,module,pid) VALUES(2,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車維修工5級題庫(含答案解析)
- 滬科版高一化學(xué)必修一學(xué)案:物質(zhì)的分類(解析版)
- 中小微企業(yè)供應(yīng)鏈金融與綠色金融創(chuàng)新實(shí)踐報(bào)告
- 2020年成人高考專升本民法知識產(chǎn)權(quán)專項(xiàng)練習(xí)
- 2020年成人高考高起專英語完形填空鞏固
- 沉浸式課堂的特征
- 湖南省郴州市2024-2025學(xué)年八年級下學(xué)期5月期中考試數(shù)學(xué)試卷(含解析)
- 2025至2030年中國網(wǎng)上購物行業(yè)市場調(diào)研及未來發(fā)展趨勢預(yù)測報(bào)告
- 2025至2030年中國酥糖行業(yè)運(yùn)行態(tài)勢及市場發(fā)展?jié)摿︻A(yù)測報(bào)告
- 2025至2030年中國海藻燃料行業(yè)市場全景監(jiān)測及投資前景展望報(bào)告
- 水庫藍(lán)線管理辦法
- 醫(yī)院醫(yī)療質(zhì)量安全專項(xiàng)整治自查表
- 2025年幼教中級能力水平測試題及答案
- 旅游道路維護(hù)管理辦法
- 突破傳統(tǒng)治療:2025年免疫治療在潰瘍性結(jié)腸炎中的應(yīng)用報(bào)告
- JC/T2647-2024預(yù)拌混凝土生產(chǎn)企業(yè)廢水回收利用規(guī)范
- 導(dǎo)尿護(hù)理技術(shù)課件
- 復(fù)雜子宮全切術(shù)后護(hù)理查房
- 2025年初中美術(shù)教師招聘考試試卷含答案(三套)
- 三體系培訓(xùn)課件
- 2024職業(yè)病防治宣傳手冊
評論
0/150
提交評論