一步一步循序漸進(jìn)學(xué)習(xí)TP.doc_第1頁(yè)
一步一步循序漸進(jìn)學(xué)習(xí)TP.doc_第2頁(yè)
一步一步循序漸進(jìn)學(xué)習(xí)TP.doc_第3頁(yè)
一步一步循序漸進(jìn)學(xué)習(xí)TP.doc_第4頁(yè)
一步一步循序漸進(jìn)學(xué)習(xí)TP.doc_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

一步一步循序漸進(jìn)學(xué)習(xí)TP前言TP的手冊(cè)相當(dāng)多,其實(shí)不必再出這樣的貼子,論技術(shù),我也是菜鳥(niǎo)一個(gè),同時(shí)也在學(xué)習(xí)當(dāng)中??吹秸搲隙嗔瞬簧傩屡笥眩簧僭诒г故謨?cè)看不懂,那我就姑且拋磚引玉,嘗試與新朋友們更簡(jiǎn)單地、手把手地進(jìn)入TP的應(yīng)用中去。講解過(guò)程中有錯(cuò)的地方,大家?guī)兔χ刚?。這個(gè)系列,初步定下的目標(biāo)為,從零開(kāi)始,以TP示例中心中的Form為例進(jìn)行講解,以實(shí)踐為主,理論為輔,將TP的最基本內(nèi)容逛一遍,至少讓我們一起學(xué)會(huì)如何進(jìn)行最簡(jiǎn)單的對(duì)數(shù)據(jù)進(jìn)行查、增、改、刪操作并輸出到模板。由于我們說(shuō)的是循序漸進(jìn),所以我用步驟式來(lái)說(shuō)明,只要一步一步跟著做,相信聰明的你在使用過(guò)程中就會(huì)明白TP的應(yīng)用了。注意:以下的步驟,僅僅是TP靈活的布署方式其中一種,實(shí)際開(kāi)發(fā)中可以根據(jù)自己的情況去另行設(shè)定。至于為什么那樣做,我們會(huì)在最后再作總結(jié),我覺(jué)得先實(shí)操然后再進(jìn)行說(shuō)明比較容易明白。以下不再重復(fù)解釋。=一快速開(kāi)始一個(gè)項(xiàng)目名詞解釋:項(xiàng)目:你要開(kāi)發(fā)的系統(tǒng),稱之為項(xiàng)目。入口文件:你可以理解為這個(gè)項(xiàng)目的唯一一道門(mén),以后所有的操作都會(huì)通過(guò)這道門(mén)去執(zhí)行處理。不必理會(huì)什么意思,你甚至可以先把它看成是index.php就是入口文件TP: ThinkPHP框架的簡(jiǎn)稱1下載TP1.5正式版2 擬好你的項(xiàng)目名稱,我們這里以 Myapp 為項(xiàng)目名稱3 在www根目錄下,將TP框架所有文件全部復(fù)制過(guò)去,文件夾名稱是ThinkPHP4 與ThinkPHP同級(jí)新建一個(gè)文件夾,起名為 Myapp,也就是項(xiàng)目名稱5 在www根目錄下,創(chuàng)建一個(gè)PHP文件,起名index.php,這就是入口文件入口文件index.php代碼:1. run();14. ?復(fù)制代碼就這么簡(jiǎn)單幾行,然后打開(kāi)瀏覽器,輸入/一個(gè)TP項(xiàng)目就這樣構(gòu)建出來(lái)了。你會(huì)看到1. _ Hello,歡迎使用ThinkPHP!復(fù)制代碼這行字。并自動(dòng)為你創(chuàng)建好項(xiàng)目的目錄。接下來(lái),我們這個(gè)項(xiàng)目添磚加瓦。=二 簡(jiǎn)單認(rèn)識(shí)項(xiàng)目里的各個(gè)文件夾名詞解釋:Action:模塊控制器類,你暫時(shí)可以理解為一個(gè)Action文件代表著一個(gè)應(yīng)用模塊,Action文件中的每一個(gè)方法(function)代表著一個(gè)操作,操作分為有輸出到模板的操作和只具執(zhí)行不需要輸出的操作。對(duì)于有輸出的操作,則代表了你的項(xiàng)目中一個(gè)展示給用戶應(yīng)用的web頁(yè)面。(注意:這不是正統(tǒng)的術(shù)語(yǔ)解釋)Model:數(shù)據(jù)表相對(duì)應(yīng)的Model類,可以理解為一個(gè)Model文件對(duì)應(yīng)著你項(xiàng)目數(shù)據(jù)庫(kù)的其中一個(gè)表。命名關(guān)系請(qǐng)參看這里:/Article/10在添磚加瓦之前,我們有必要認(rèn)識(shí)一下各個(gè)文件夾的用途。打開(kāi)Myapp文件夾,里面TP已讓你很省心地構(gòu)建了最基本的目錄。其中:Cache文件夾:項(xiàng)目自動(dòng)生成的模版緩存會(huì)出現(xiàn)在這里Common文件夾:你的項(xiàng)目中要用到的自己寫(xiě)的函數(shù),可以在這個(gè)文件夾下創(chuàng)建一個(gè)名為common.php文件,在這個(gè)文件中書(shū)寫(xiě)函數(shù),這些函數(shù)可以用在你項(xiàng)目的各個(gè)類,同時(shí)也可以在模板變量中使用,TP框架會(huì)自動(dòng)加載。Conf文件夾:項(xiàng)目的運(yùn)行配置文件config.php將放在這個(gè)文件夾里,(還有路由配置,調(diào)試配置等,請(qǐng)先忽略)Data文件夾:TP會(huì)把項(xiàng)目的數(shù)據(jù)庫(kù)表字段生成到這里,另外。那些先不必理會(huì)。Lang文件夾:項(xiàng)目的語(yǔ)言設(shè)置目錄,先不必理會(huì)。Lib文件夾:應(yīng)用類庫(kù)目錄,在這文件夾內(nèi)還有兩個(gè)文件夾:Action和Model,Action目錄放置命名為xxxAction.class.php的控制器文件,Model目錄放置對(duì)應(yīng)數(shù)據(jù)庫(kù)表的命名為xxxModel.class.php的類文件。Logs文件夾:項(xiàng)目中自動(dòng)產(chǎn)生的日志文件會(huì)存放在這里。暫不必理會(huì)。Temp文件夾:數(shù)據(jù)緩存目錄,存放項(xiàng)目中自動(dòng)生成的項(xiàng)目運(yùn)行緩存文件等,以及使用文件方式時(shí)的緩存文件等Tpl文件夾:模板文件目錄,內(nèi)有一個(gè)default文件夾,也就是默認(rèn)的風(fēng)格。項(xiàng)目生成的目錄結(jié)構(gòu)就先簡(jiǎn)單介紹到這里,下一步我們要簡(jiǎn)單地對(duì)項(xiàng)目進(jìn)行最基本的配置。三 創(chuàng)建數(shù)據(jù)表,并對(duì)項(xiàng)目進(jìn)行配置,以便連接到數(shù)據(jù)庫(kù)。1 我們這里使用的是Mysql數(shù)據(jù)庫(kù),利用PhpMyadmin新建一個(gè)數(shù)據(jù)庫(kù),名稱為myapp。使用示例中心中的sql如下:1. CREATE TABLE think_form (2. id smallint(4) unsigned NOT NULL auto_increment,3. title varchar(255) NOT NULL,4. content varchar(255) NOT NULL,5. create_time int(11) unsigned NOT NULL,6. update_time int(11) unsigned NOT NULL,7. status tinyint(1) unsigned NOT NULL,8. email varchar(50) NOT NULL,9. PRIMARY KEY(id)10. ) ENGINE=MyISAMDEFAULT CHARSET=utf8 ;復(fù)制代碼2 在Conf文件夾內(nèi),建立一個(gè)config.php文件。這個(gè)文件,就是Myapp項(xiàng)目的配置文件。系統(tǒng)會(huì)自動(dòng)加載config.php文件中的配置是以數(shù)組返回方式進(jìn)行定義,會(huì)覆蓋TP框架中的common目錄下convention.php的默認(rèn)配置。沒(méi)有設(shè)置的配置,就以默認(rèn)為準(zhǔn)。配置設(shè)置可以利用C函數(shù)動(dòng)態(tài)改變,暫且不必理會(huì)。而我們連接到數(shù)據(jù)庫(kù)的設(shè)置也是在這個(gè)文件中書(shū)寫(xiě)。config.php代碼如下:1. mysql, / 使用的數(shù)據(jù)庫(kù)是mysql5. DB_HOST=localhost,6. DB_NAME=myapp,/ 數(shù)據(jù)庫(kù)名7. DB_USER=root,8. DB_PWD=123456,/ 填寫(xiě)你連接數(shù)據(jù)庫(kù)的密碼9. DB_PORT=3306,10. DB_PREFIX=think_, / 數(shù)據(jù)表表名的前綴 請(qǐng)參看/Article/1011. );12. ?復(fù)制代碼暫時(shí)就是這樣,后面會(huì)再根據(jù)需要進(jìn)一步添加和講解。3 在Lib/Model目錄下,創(chuàng)建一個(gè)文件,命名為FormModel.class.php。命名規(guī)則剛才你已看了兩次。這里就不再多說(shuō),我們可以看到,數(shù)據(jù)表名是think_form,由于我們配置了數(shù)據(jù)表表名的前綴為think_,所以文件的命名直接使用 不含前綴的數(shù)據(jù)表表名+Model.class.php就行了。在這個(gè)文件中書(shū)寫(xiě)代碼:1.2. 復(fù)制代碼就這樣定義一個(gè)類名就行了。該類繼承了Model類。至于自動(dòng)驗(yàn)證,自動(dòng)過(guò)濾,自動(dòng)填充這些,暫且不理會(huì)。4 提前先爽一下吧。再次利用PhpMyAdmin,在該表中插入一些數(shù)據(jù)sql如下:1. INSERT INTO think_form (id, title, content, create_time, update_time, status, email) VALUES2. (1, 這是測(cè)試數(shù)據(jù), dfdf, 1212724876, 0, 1, );復(fù)制代碼然后我們打開(kāi)Myapp/Lib/Action/IndexAction.class.php文件,將里面的內(nèi)容刪掉。改成下面這樣:1. findall();5. dump ( $form );6. exit;7. 8. 9. ?復(fù)制代碼打開(kāi)瀏覽器,輸入/,看,數(shù)據(jù)給輸出來(lái)了。今天先到這里,下一步我們繼續(xù)循序漸進(jìn)。讓我們一起把這個(gè)Form最后變成一個(gè)有會(huì)員功能的留言板。第四節(jié) 簡(jiǎn)單了解TP的模板輸出上一章節(jié)我們提及到,TP中的每一個(gè)xxxAction.class.php文件代表著一個(gè)應(yīng)用模塊,此Action中的每一個(gè)方法(function)代表著一個(gè)操作,操作分為有輸出到模板的操作和只具執(zhí)行不需要輸出的操作。打開(kāi)Myapp/Lib/Action/IndexAction.class.php文件,我們看看里面的基礎(chǔ)代碼1. class IndexAction extends Action2. public function index()3. 4. 復(fù)制代碼理論知識(shí):1 在TP開(kāi)發(fā)中,要增加一個(gè)應(yīng)用模塊,就在Action文件夾里建立一個(gè)類,類的文件命名格式是模塊名稱+Action.class.php。例如我們這里的應(yīng)用模塊是Index,所以定義文件名為IndexAction.class.php2 應(yīng)用模塊類的定義要繼承框架的Action類。要為這個(gè)應(yīng)用模塊添加一個(gè)操作,則定義一個(gè)以此操作為命名的function.例如上面的index操作。通常一個(gè)應(yīng)用模塊中,會(huì)有若干操作(function)需要有與用戶交互的頁(yè)面,這就需要用到模板輸出,TP本身已內(nèi)置了一套具有TP特色的,很強(qiáng)大易擴(kuò)展但應(yīng)用非常方便兼簡(jiǎn)單的模板引擎。在應(yīng)有模塊中,如果某個(gè)操作是需要頁(yè)面顯示的,只要對(duì)應(yīng)在Myapp/Tpl/default/里建立一個(gè)文件夾,文件夾以應(yīng)用模塊的名稱來(lái)命名,然后在這個(gè)文件夾下,建立一個(gè)以這個(gè)function名稱來(lái)命名的html文件,就可以在這個(gè)方法中使用$this-display()方法來(lái)直接調(diào)用該模板。(當(dāng)然也可以調(diào)用其它模塊下的其它模板或顯式指定模板文件位置和名稱,由于是循序漸進(jìn)式的學(xué)習(xí),就讓我們先忽略吧)了解這些理論后,我們先簡(jiǎn)單實(shí)操一下這些知識(shí)。1 在Myapp/Tpl/default/下建立一個(gè)文件夾,根據(jù)應(yīng)用模塊的名稱,我們將這個(gè)文件夾命名為Index2 在Myapp/Tpl/default/Index/下建立一個(gè)html文件,根據(jù)操作名稱,我們命名該文件為index.html3 打開(kāi)Myapp/Lib/Action/IndexAction.class.php文件,修改代碼為1. assign(name,$value);6. $this-display();7. 8. 9. ?復(fù)制代碼代碼知識(shí)要點(diǎn)(摘自手冊(cè):ThinkPHP模板指南,此后的知識(shí)要點(diǎn)均來(lái)自TP官方手冊(cè),不再申明)在Action類里面使用 assign方法對(duì)模板變量賦值,無(wú)論何種變量類型都統(tǒng)一使用assign賦值。1. $this-assign(name,$value);復(fù)制代碼/ 下面的寫(xiě)法是等效的1. $this-name = $value ;復(fù)制代碼/ 模板變量賦值后就需要調(diào)用模板文件來(lái)輸出相關(guān)的變量,模板調(diào)用通過(guò)display方法來(lái)實(shí)現(xiàn)1. $this-display();復(fù)制代碼4 打開(kāi)Myapp/Tpl/default/Index/index.html文件,代碼為1. 2. 3. 4. $name5. 6. 7. 測(cè)試輸出: $name8. 9. 復(fù)制代碼代碼知識(shí)要點(diǎn):模板變量使用$變量名稱這種標(biāo)簽進(jìn)行輸出。不同的模板變量類型,使用不同的標(biāo)簽,標(biāo)簽可以自行另外定義,暫且不理會(huì)。5 打開(kāi)瀏覽器輸入地址:/,我們可以看到,定義的模板變量已經(jīng)輸出來(lái)了。附加補(bǔ)充知識(shí):1 如果要同時(shí)輸出多個(gè)模板變量,可以使用下面的方式:1. $array = array();2. $arrayname = thinkphp;3. $arrayemail = ;4. $arrayphone = 12335678;5. $this-assign($array);復(fù)制代碼這樣,就可以在模板文件中同時(shí)輸出name、email和phone三個(gè)變量。2 我們使用上面的變量定義,將整個(gè)數(shù)組定義為一個(gè)模板變量來(lái)輸出1. $array = array();2. $arrayname = thinkphp;3. $arrayemail = ;4. $arrayphone = 12335678;5. $this-assign(array,$array);6. $this-display();復(fù)制代碼在html中,要輸出$arrayname的值,代碼是1. $ 或 $arrayname復(fù)制代碼3 將這個(gè)數(shù)組循環(huán)輸出3.1 IndexAction.class.php中代碼更改如下1. assign(array,$array);10. $this-assign(name,$value);11. $this-display();12. 13. 14. ?復(fù)制代碼3.2 將Myapp/Tpl/default/Index/index.html代碼更改如下:1. 2. 3. 4. $name5. 6. 7. 8. $vo9. 10. 11. 復(fù)制代碼代碼知識(shí)要點(diǎn):name=array是指要循環(huán)的模板變量是array,id=vo是指這個(gè)數(shù)據(jù)在模板輸出時(shí)所使用的名稱對(duì)于TP的模板引擎輸出先簡(jiǎn)單了解到這里。第五節(jié) 初步了解URL如何訪問(wèn)模塊操作通過(guò)前面的學(xué)習(xí),我們已大概地明白了應(yīng)用模塊中的操作與模板如何對(duì)應(yīng)。而這一節(jié)將簡(jiǎn)單講解如何通過(guò)URL來(lái)訪問(wèn)操作。由于我們要循序漸進(jìn),所以先只介紹下面章節(jié)要用到的知識(shí),要想深入學(xué)習(xí)還請(qǐng)參看官方手冊(cè)URL設(shè)計(jì)和SEO支持TP支持四種URL訪問(wèn)方式,默認(rèn)是智能模式,所以我們就這種模式進(jìn)行簡(jiǎn)要說(shuō)明。智能模式下的URL基本結(jié)構(gòu)是這樣的http:/servername/appName/moduleName/actionName/params你可以理解為http:/服務(wù)器地址/入口文件位置/應(yīng)用模塊名稱/具體操作名稱/GET變量參數(shù)解釋一下上面文字中所譯的URL結(jié)構(gòu),為什么appname項(xiàng)目名稱我將它譯成了入口文件位置:通常情況下,我們的入口文件index.php都是放在根目錄中,這時(shí)項(xiàng)目名稱就會(huì)被入口文件index.php所替代。在前幾節(jié)里,我們已知道,一個(gè)Action文件就是一個(gè)應(yīng)用模塊,而應(yīng)用模塊中的每個(gè)方法(function)就是一個(gè)具體操作。因此,假如要訪問(wèn)我們實(shí)例中的Index模塊下的index操作。地址應(yīng)該是/index.php/Index/index如果入口文件不是在服務(wù)器的根目錄,而是在myapp目錄下,那么入口文件位置就是 Myapp/index.php,此時(shí)上面的URL訪問(wèn)就相應(yīng)要換成/Myapp/index.php/Index/index這樣說(shuō)理應(yīng)很清楚了,不過(guò)別讓這么多index給混亂咯,對(duì)應(yīng)URL的結(jié)構(gòu)去明白每一個(gè)index的函義,同時(shí)注意大小寫(xiě)簡(jiǎn)單實(shí)操:1 打開(kāi)Myapp/Lib/Action/IndexAction.class.php文件,在index這個(gè)function下再添加一個(gè)操作test1. assign(array,$array);10. $this-assign(name,$value);11. $this-display();12. 13. public function test()14. header(Content-Type:text/html; charset=utf-8);15. echo 哈,訪問(wèn)正確!;16. 17. / 類定義end18. ?復(fù)制代碼2 嘗試對(duì)應(yīng)URL結(jié)構(gòu),來(lái)訪問(wèn)這個(gè)test操作,如果能成功看到echo的文字。則這節(jié)我們又學(xué)會(huì)了多一點(diǎn)知識(shí)。附加知識(shí)點(diǎn): 去掉URL里面的index.php 要去掉URL里的入口文件index.php,使URL類似這樣的形式 /Index/index 可以按官方手冊(cè)所提供的方法進(jìn)行如下操作。 1 確認(rèn)httpd.conf配置文件中加載了mod_rewrite.so模塊 2 AllowOverride None 將None改為 All 3 打開(kāi)Myapp/Conf/config.php文件,在配置的數(shù)組中添加一行: URL_MODEL=2, 在入口文件所在的同級(jí)目錄下,新建一個(gè).htaccess文件,內(nèi)容是1. 2. RewriteEngine on3. RewriteCond %REQUEST_FILENAME !-d4. RewriteCond %REQUEST_FILENAME !-f5. RewriteRule (.*)$ index.php/$1 QSA,PT,L6. 復(fù)制代碼如果你的服務(wù)器環(huán)境支持rewrite,使用/Index/index就可以正常訪問(wèn)到Index模塊的index操作了。 此后我們的學(xué)習(xí)中用到的URL,都是假定你使用了rewrite的情況。第六節(jié) CURD知識(shí)之一 C 創(chuàng)建(create)本帖最后由 zzguo28 于 2009-3-13 00:56 編輯注意:看到不少留言說(shuō)操作不成功或出錯(cuò),請(qǐng)別忘記,此系列教程出來(lái)時(shí),TP1.6還沒(méi)出來(lái),所以系列6之前所介紹的示例和操作都還是標(biāo)準(zhǔn)版本1.5的,如果你使用1.6版,請(qǐng)對(duì)應(yīng)兩者差異性。例如submit不能有name屬性,是因?yàn)樵瓉?lái)1.5有字段緩存進(jìn)行過(guò)濾處理。1.6沒(méi)有了字段緩存。例如數(shù)據(jù)自動(dòng)驗(yàn)證和自動(dòng)填充都有了一定的區(qū)別。關(guān)于1.6的使用可以下載快速入門(mén)教程,是此系列新手篇的完整版,并且附有示例源碼。-第六節(jié) CURD知識(shí)之一 C 創(chuàng)建(create)從這一節(jié)開(kāi)始,我們就要涉及到數(shù)據(jù)庫(kù)操作,TP對(duì)數(shù)據(jù)庫(kù)的操作非常簡(jiǎn)便,以下是一些基礎(chǔ)知識(shí)講解。名詞解析:1CURD:代表數(shù)據(jù)庫(kù)四個(gè)基本操作:創(chuàng)建:create,更新:update,讀?。簉ead,刪除:delete2模型對(duì)象:即數(shù)據(jù)對(duì)象,你項(xiàng)目里每一個(gè)Model類文件都會(huì)對(duì)應(yīng)著一個(gè)數(shù)據(jù)表(或者視圖),模型與數(shù)據(jù)表存在一種映射關(guān)系。TP約定了命名要遵循一定的規(guī)范,如果不符合,則需要根據(jù)情況進(jìn)行額外的相應(yīng)設(shè)置。例如Model類的tableName屬性在第三節(jié)時(shí),曾略為提到Model類文件命名,現(xiàn)在再回顧一下這部分的內(nèi)容:我們之前在數(shù)據(jù)庫(kù)中,已建立了一個(gè)think_form數(shù)據(jù)庫(kù)表,并且在配置文件config.php中,我們定義了數(shù)據(jù)表的前綴是think_,模型類(Model)文件的命名規(guī)則是:不包括前綴的數(shù)據(jù)庫(kù)表表名并且首字母大寫(xiě)+Model.class.php所以之前我們?yōu)閠hink_form數(shù)據(jù)表在Myapp/Lib/Model目錄下建立一個(gè)文件FormModel.class.php模型類的特殊命名還可以智能識(shí)別駝峰式的表命名,假設(shè)我們有個(gè)是類似think_new_table這樣的表可以命名為NewTableModel.class.php。默認(rèn)配置便可以智能識(shí)別自動(dòng)對(duì)應(yīng)think_new_table表,因此不必修改配置。開(kāi)發(fā)過(guò)程中,只要簡(jiǎn)單地定義好與數(shù)據(jù)表對(duì)應(yīng)的模型類(xxxModel.class.php),就可以進(jìn)行對(duì)數(shù)據(jù)操作了。如何讓這個(gè)模型支持自動(dòng)驗(yàn)證,自動(dòng)填充,自動(dòng)過(guò)濾這些知識(shí),在下面涉及到時(shí)會(huì)作相應(yīng)講解。一般來(lái)說(shuō),在表中添加數(shù)據(jù)都是通過(guò)表單來(lái)建立,為了更直觀地學(xué)習(xí)CURD中的C,我們接下來(lái)建立個(gè)表單來(lái)進(jìn)行添加數(shù)據(jù)的操作。之前我們已在Myapp/Lib/Model/下建立好FormModel.class.php類-模型(M)同時(shí)也在Myapp/Lib/Action/下添加了一個(gè)Index應(yīng)用模塊和寫(xiě)下了一個(gè)index操作-控制器(C)并且在Tpl目錄下建立了與之對(duì)應(yīng)的模板目錄Index及index.html模板文件-視圖(V)MVC模式的開(kāi)發(fā)已體現(xiàn)了出來(lái)。tdweb曾簡(jiǎn)明扼要地概括了TP中這三者的關(guān)系,C的作用,就是從M中取得數(shù)據(jù)到V,使用TP以表單提交數(shù)據(jù)到庫(kù),流程和你所了解的表單提交沒(méi)有什么區(qū)別,只是TP簡(jiǎn)化了數(shù)據(jù)操作的處理過(guò)程。我們?cè)趯?shí)際操作中體會(huì)一下。先來(lái)看看我們所定義的數(shù)據(jù)表form的字段:1. id,/自動(dòng)編號(hào)2. title,/標(biāo)題3. content,/內(nèi)容4. create_time,/創(chuàng)建時(shí)間5. update_time/更新時(shí)間6. email,/郵箱7. status,/狀態(tài)復(fù)制代碼其中的create_time字段是為了記錄數(shù)據(jù)插入的時(shí)間,我們可以利用TP的數(shù)據(jù)自動(dòng)填充來(lái)處理。在Model類定義 $_auto 屬性,可以完成數(shù)據(jù)自動(dòng)處理功能,用來(lái)處理默認(rèn)值和其他系統(tǒng)寫(xiě)入字段。注意1:該自動(dòng)填充可能會(huì)覆蓋表單提交項(xiàng)目。其目的是為了防止表單非法提交字段。注意2:要使用Model類的create方法創(chuàng)建數(shù)據(jù)對(duì)象的時(shí)候才會(huì)自動(dòng)進(jìn)行表單數(shù)據(jù)處理。1 打開(kāi)Myapp/Lib/Model/FormModel.class.php文件,更改代碼為1. 復(fù)制代碼代碼知識(shí)要點(diǎn):Model類的$_auto屬性由多個(gè)填充因子組成的數(shù)組,填充因子定義格式:array(填充字段,填充內(nèi)容,填充條件,附加規(guī)則)填充字段:就是需要進(jìn)行處理的表單字段,這個(gè)字段并不一定要是數(shù)據(jù)庫(kù)表中的字段,對(duì)于表單內(nèi)的輔助檢測(cè)字段比如重復(fù)密碼和驗(yàn)證碼也可以處理。填充條件:ADD | UPDATE | ALL(注意,此是1.5版本說(shuō)明,1.6已改為1 2 3,后續(xù)教程有說(shuō)明)當(dāng)為ADD時(shí),會(huì)在新增數(shù)據(jù)時(shí)自動(dòng)填充,這是默認(rèn)的處理方式當(dāng)為UPDATE時(shí),在更新數(shù)據(jù)的時(shí)候會(huì)自動(dòng)填充當(dāng)為ALL時(shí),所有情況下都會(huì)進(jìn)行自動(dòng)填充附加規(guī)則:附加規(guī)則是針對(duì)填充內(nèi)容而言,表示該內(nèi)容填充的方式,包括function,callback,field,string對(duì)于field使用其它字段進(jìn)行填充和string直接標(biāo)示字符串作為值進(jìn)行填充很好理解。例如上面1. array(status,1,ADD),復(fù)制代碼就是將狀態(tài)status字段的值直接以1填充.下面主要說(shuō)說(shuō)function與callback這兩個(gè)附加規(guī)則。1. protected $_auto=array(2. array(create_time,time,ADD,function),3. );復(fù)制代碼上面create_time代表了要處理的字段,填充內(nèi)容是time,附加規(guī)則是function使用函數(shù),填充條件是ADD新增時(shí)處理,那么整行代碼表示對(duì)create_time字段在新增的時(shí)候使time函數(shù)作為該字段的值進(jìn)行自動(dòng)填充。再看一個(gè)function作為附加規(guī)則的例子1. protected $_auto=array(2. array(password,md5,ADD,function),3. );復(fù)制代碼當(dāng)使用function作為附加規(guī)則時(shí),第二個(gè)填充內(nèi)容就代表了這個(gè)因子是一個(gè)函數(shù)名稱,該函數(shù)的參數(shù)就是代表填充字段的值,比如password的值是123456,則上面的代碼會(huì)先將這個(gè)值使用函數(shù)md5(123456),這樣處理后再插入到數(shù)據(jù)表中去。對(duì)于function(函數(shù))和callback(回調(diào)方法)理論是一樣的,只不過(guò)一個(gè)是表示填充內(nèi)容所寫(xiě)的是函數(shù)名,另一個(gè)是表示填充內(nèi)容是類中的方法名。函數(shù)可以是PHP5內(nèi)置函數(shù)或你自己所寫(xiě)的函數(shù)。而callback是當(dāng)前模型類所能調(diào)用的一個(gè)方法。有關(guān)數(shù)據(jù)填充方面的詳細(xì)資料,請(qǐng)參看官方使用手冊(cè) ThinkPHP數(shù)據(jù)操作指南2 打開(kāi)Myapp/Tpl/default/Index/index.html文件,我們修改代碼將form寫(xiě)進(jìn)去1. 2. 3. 4. $title5. 6. 7. 8. 9. 標(biāo)題:10. 11. 12. 13. 郵箱:14. 15. 16. 內(nèi)容:17. 18. 19. 20. 21. 22. 23. 復(fù)制代碼在上面代碼中,我們簡(jiǎn)單地建了一個(gè)form表單,并將標(biāo)題統(tǒng)一使用一個(gè)模板變量$title。action提交到的處理地址是_URL_/add,其中_URL_是一個(gè)常量定義,表示當(dāng)前模塊地址,TP模板引擎會(huì)自動(dòng)將這句解釋為/index.php/Index/add,常見(jiàn)的模板使用的常量有_ROOT_ 網(wǎng)站根目錄地址_APP_ 當(dāng)前項(xiàng)目(入口文件)地址_URL_ 當(dāng)前模塊地址_ACTION_ 當(dāng)前操作地址_SELF_ 當(dāng)前 URL 地址3 設(shè)置模板變量 $title ,增加add操作方法打開(kāi)Myapp/Lib/Action/IndexAction.class.php文件,修改代碼如下1.2. assign(title,添加數(shù)據(jù));/這里設(shè)置了模板變量$title6. $this-display();7. 8. / 處理表單數(shù)據(jù)的方法9. function add()10. $Form = D(Form);11. if($Form-create() 12. $Form-add();13. $this-redirect();14. else15. header(Content-Type:text/html; charset=utf-8);16. exit($Form-getError(). 返 回 );17. 18. 19. /類定義 end20. ?復(fù)制代碼代碼知識(shí)要點(diǎn):模板變量賦值前面的章節(jié)已介紹過(guò)。這里就不啰嗦了。我們來(lái)看看add方法的代碼。$Form = D(Form);這里使用了TP的特色單字母函數(shù)D,是操作數(shù)據(jù)庫(kù)時(shí)最常用的TP函數(shù),表示實(shí)例化Form對(duì)象,即$Form = new FormModel();D函數(shù)的具體代碼可以查看ThinkPHP目錄內(nèi)的common/function.php中的片段,它會(huì)自動(dòng)引入Model類,并判斷之前如果實(shí)例化過(guò)這個(gè)Model,就不再實(shí)例化,若然該Model不存在,就會(huì)拋出異常錯(cuò)誤,另外,D可以跨項(xiàng)目訪問(wèn)Model,暫且忽略。$Form-create()使用Model類的Create方法創(chuàng)建一個(gè)Form對(duì)象,失敗會(huì)返回false。$Form-add();/add方法會(huì)將表單數(shù)據(jù)進(jìn)行寫(xiě)入$this-redirect();/執(zhí)行跳轉(zhuǎn)就這么簡(jiǎn)單幾行代碼,便完成了對(duì)數(shù)據(jù)插入的處理。現(xiàn)在我們可以嘗試一下在表單中輸入數(shù)據(jù)進(jìn)行提交試試了。請(qǐng)先隨便插入幾條數(shù)據(jù),以便下一節(jié)我們繼續(xù)學(xué)習(xí)CURD中的R本帖最后由 zzguo28 于 2009-3-13 01:09 編輯很抱歉!不得不出這一篇過(guò)渡文章。為了讓這系列教程不致于日后會(huì)誤導(dǎo),從這節(jié)開(kāi)始,讓我們轉(zhuǎn)型到1.6版的使用方式上。但是對(duì)于1.6版的使用,我也是在摸索當(dāng)中學(xué)習(xí),錯(cuò)誤和不足之處肯定會(huì)比較多,故懇請(qǐng)流年大哥和tdweb,東至,yhustc等大大可以及時(shí)指正和補(bǔ)充,在此先謝謝了。- 基于本學(xué)習(xí)系列1-4過(guò)渡到本節(jié)的補(bǔ)充說(shuō)明 -說(shuō)明1 從這節(jié)開(kāi)始,TP或dev這兩個(gè)簡(jiǎn)稱指的都是ThinkPHP1.6版,可以到svn下載。/svn/branches/dev下載后刪除原來(lái)的ThinkPHP框架文件,將dev同樣命名為T(mén)hinkPHP,并仍是放置于網(wǎng)站的根目錄下。另外,為了方便需要時(shí)可以對(duì)實(shí)例截圖而不引起讀者你誤解,基于我的網(wǎng)站目錄結(jié)構(gòu),現(xiàn)將Myapp的index.php位置更改到Myapp文件夾下(不再是原來(lái)的根目錄).步1:將根目錄中的原index.php剪切并粘貼到Myapp文件夾下。更改代碼為:1. run();14. ?復(fù)制代碼代碼補(bǔ)充注釋:代碼中項(xiàng)目名稱其實(shí)是可以不必定義的,系統(tǒng)會(huì)自動(dòng)根據(jù)當(dāng)前的目錄名定義名稱。步2: 將.htaccess文件復(fù)制一份粘貼到Myapp目錄下。步3: 將Cache目錄,Temp目錄,Data目錄清空。說(shuō)明2 第五節(jié)中對(duì)于URL訪問(wèn)的默認(rèn)模式在dev版默認(rèn)配置中,dispatch即URL調(diào)度功能是關(guān)閉的,所以在默認(rèn)模式下,要訪問(wèn)Index模塊的index操作,地址應(yīng)是:index.php?m=index&a=index,m指的是模塊變量(Model),a指的是操作變量(Action)。如果要使用類似第五節(jié)中的index.php/moduleName/actionName方式,則要在config.php文件里設(shè)置DISPATCH_ON為true;并且,也只有開(kāi)啟了此功能后,URL_MODEL的設(shè)置才會(huì)有效。(在上面的章節(jié)我們提及過(guò),可以設(shè)置URL_MODEL為2來(lái)使用rewrite功能去除顯示index.php)所以,現(xiàn)在我們的config.php代碼是1. mysql, / 使用的數(shù)據(jù)庫(kù)是mysql5. DB_HOST=localhost,6. DB_NAME=myapp,/數(shù)據(jù)庫(kù)名7. DB_USER=root,8. DB_PWD=123456,/ 填寫(xiě)你連接數(shù)據(jù)庫(kù)的密碼9. DB_PORT=3306,10. DB_PREFIX=think_, / 數(shù)據(jù)表表名的前綴 請(qǐng)參看/Article/1011. DISPATCH_ON= true,12. URL_MODEL=2,13. TMPL_VAR_IDENTIFY=array,/模板變量識(shí)別 留空自動(dòng)判斷 array 數(shù)組 obj 對(duì)象14. DEBUG_MODE=true,/開(kāi)啟調(diào)試模式15. );16. ?復(fù)制代碼代碼補(bǔ)充注釋:此節(jié)之后的內(nèi)容會(huì)涉及到模板輸出及數(shù)據(jù)操作,所以在這里明確設(shè)置了模板變量為數(shù)組,并開(kāi)啟TP的調(diào)試模式。注意3:第六節(jié) CURD知識(shí)之一 C(創(chuàng)建)中的自動(dòng)填充dev版的自動(dòng)填充功能已移到AdvModel類中。要使用此功能,我們需要在Myapp/Lib/Model類文件中引入該類.那么再來(lái)看看我們所定義的數(shù)據(jù)表form的字段:1. id,/自動(dòng)編號(hào)2. title,/標(biāo)題3. content,/內(nèi)容4. create_time,/創(chuàng)建時(shí)間5. update_time/更新時(shí)間6. email,/郵箱7. status,/狀態(tài)復(fù)制代碼引用tdweb手記:如果需要新建數(shù)據(jù)時(shí)自動(dòng)填入時(shí)間戳,只需要設(shè)置數(shù)據(jù)表字段名create_time,如果需要修改時(shí)自動(dòng)保存時(shí)間戳,那么設(shè)置數(shù)據(jù)表字段名為update_time。如果你的數(shù)據(jù)表字段名不是默認(rèn)的,那么需要指定,例如protected $autoCreateTimestamps = ctime;protected $autoUpdateTimestamps = utime;故此,讓我們打開(kāi)Myapp/Lib/Model/FormModel.class.php文件,將代碼更改為如下:1. 復(fù)制代碼代碼補(bǔ)充注釋:注意:dev版的填充條件改為1 新增 2 更新 3 包含1和2,默認(rèn)為新增。所以定義更方便了.而使用ADD | UPDATE | ALL會(huì)無(wú)效的(TO流年大哥:TP代碼還有一個(gè)特色就是函數(shù)或方法的命名很符合語(yǔ)言使用習(xí)慣,原來(lái)的add,update,all很直觀,易記,可惜沒(méi)了)array(field,填充內(nèi)容,填充條件,附加規(guī)則,額外參數(shù))alias_import($alias,$classfile=)快速定義和別名導(dǎo)入這是新

溫馨提示

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

評(píng)論

0/150

提交評(píng)論