《PHP Web應(yīng)用開發(fā)案例教程》630-9(阮云蘭)教案 第28課 ThinkPHP的控制器與模型_第1頁
《PHP Web應(yīng)用開發(fā)案例教程》630-9(阮云蘭)教案 第28課 ThinkPHP的控制器與模型_第2頁
《PHP Web應(yīng)用開發(fā)案例教程》630-9(阮云蘭)教案 第28課 ThinkPHP的控制器與模型_第3頁
《PHP Web應(yīng)用開發(fā)案例教程》630-9(阮云蘭)教案 第28課 ThinkPHP的控制器與模型_第4頁
《PHP Web應(yīng)用開發(fā)案例教程》630-9(阮云蘭)教案 第28課 ThinkPHP的控制器與模型_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGE6PAGE6PAGE5PAGE5

課題ThinkPHP的控制器與模型課時(shí)2課時(shí)(90min)教學(xué)目標(biāo)知識(shí)技能目標(biāo):(1)了解模型的定義(2)掌握控制器的作用及相關(guān)操作素質(zhì)目標(biāo):(1)培養(yǎng)學(xué)生責(zé)任意識(shí)和職業(yè)素養(yǎng),使學(xué)生養(yǎng)成良好的習(xí)慣(2)響應(yīng)國家的號召,積極開展創(chuàng)新創(chuàng)業(yè),為個(gè)人發(fā)展和國家的興盛而努力教學(xué)重難點(diǎn)教學(xué)重點(diǎn):控制器的作用及相關(guān)操作教學(xué)難點(diǎn):ThinkPHP中模塊化設(shè)計(jì)、URL模式、命名空間教學(xué)方法案例分析法、問答法、討論法、講授法、實(shí)踐法教學(xué)用具電腦、投影儀、多媒體課件、教材教學(xué)設(shè)計(jì)第1節(jié)課:→→→傳授新知(38min)第2節(jié)課:→傳授新知(20min)→小組討論(15min)→課堂小結(jié)(3min)→作業(yè)布置(2min)教學(xué)過程主要教學(xué)內(nèi)容及步驟設(shè)計(jì)意圖第一節(jié)課課前任務(wù)【教師】布置課前任務(wù),和學(xué)生負(fù)責(zé)人取得聯(lián)系,讓其提醒同學(xué)通過文旌課堂APP或其他學(xué)習(xí)軟件,預(yù)習(xí)本節(jié)課要學(xué)習(xí)的知識(shí)【學(xué)生】完成課前任務(wù)通過課前任務(wù),使學(xué)生預(yù)習(xí)本節(jié)課要學(xué)習(xí)的知識(shí),增加學(xué)生的學(xué)習(xí)興趣考勤(2min)【教師】使用文旌課堂APP進(jìn)行簽到【學(xué)生】班干部報(bào)請假人員及原因培養(yǎng)學(xué)生的組織紀(jì)律性,掌握學(xué)生的出勤情況問題導(dǎo)入(5min)【教師】提出以下問題:ThinkPHP的控制器是什么?ThinkPHP模型的作用是什么?通過問題導(dǎo)入,引導(dǎo)學(xué)生主動(dòng)思考,激發(fā)學(xué)生的學(xué)習(xí)興趣傳授新知(38min)【教師】通過學(xué)生的回答引入要講的知識(shí),講解ThinkPHP的控制器的定義與使用,以及ThinkPHP模型的定義14.5ThinkPHP的控制器?【教師】安排學(xué)生掃碼觀看視頻“ThinkPHP的控制器”,講解知識(shí)?【學(xué)生】掃碼觀看、理解、記憶ThinkPHP的控制器實(shí)際上就是一個(gè)類,而操作則是控制器類的一個(gè)公共方法。14.5.1定義控制器控制器的定義非常簡單,下面是一個(gè)典型控制器類的定義:<?phpnamespaceHome\Controller;useThink\Controller;classIndexControllerextendsController{ publicfunctionhello(){ echo'大家好,歡迎跟我一起學(xué)習(xí)thinkphp!'; } }?>其中的IndexController類代表了Home模塊下Controller目錄下的Index控制器,而hello操作就是IndexController類中的hello()方法(公有)。當(dāng)在類中添加hello()方法后,在瀏覽器地址欄中輸入

“http://serverName/index.php/Home/Index/hello”,將會(huì)輸出“大家好,歡迎跟我一起學(xué)習(xí)thinkphp!”??刂破魍ǔP枰^承系統(tǒng)的Controller類或其子類,操作方法的定義必須是公共方法,否則會(huì)報(bào)錯(cuò)。定義控制器方法時(shí),要盡量避免和系統(tǒng)的保留方法相沖突。由于操作方法就是控制器的一個(gè)方法,所以遇到有和系統(tǒng)關(guān)鍵字沖突的方法可能就不能定義了,此時(shí)可以設(shè)置操作方法的后綴來解決,如在操作方法名后面加“Action”。14.5.2實(shí)例化控制器通常情況下,系統(tǒng)會(huì)根據(jù)URL地址解析出訪問的控制器名稱,并調(diào)用相關(guān)的操作方法,自動(dòng)完成訪問控制器的實(shí)例化。如果需要跨控制器調(diào)用,則可以單獨(dú)實(shí)例化://實(shí)例化Home模塊的User控制器$User=new\Home\Controller\UserController();//實(shí)例化Admin模塊的Blog控制器$Blog=new\Admin\Controller\BlogController();系統(tǒng)為上面的控制器實(shí)例化提供了一個(gè)快捷調(diào)用方法A(),上面的代碼可以簡化為//假設(shè)當(dāng)前模塊是Home模塊$User=A('User');$Blog=A('Admin/Blog');?【教師】通過多媒體展示例14-7,演示通過跨控制器調(diào)用的實(shí)現(xiàn)的操作A()方法的應(yīng)用。本例通過跨控制器調(diào)用的實(shí)現(xiàn),來學(xué)習(xí)A()方法在實(shí)際項(xiàng)目中的應(yīng)用(1)在網(wǎng)站根目錄下新建文件夾“07”,將例14-5中的素材文件“05”目錄下的文件全部拷貝到“07”文件夾中(2)在“.\Application\Home\Controller”目錄下新建控制器文件“UserController.class.php”……(詳見教材)?【學(xué)生】觀看、理解、記憶14.5.3頁面跳轉(zhuǎn)在應(yīng)用開發(fā)中,經(jīng)常會(huì)遇到一些帶有提示信息的跳轉(zhuǎn)頁面,例如操作成功或者操作錯(cuò)誤頁面,并且自動(dòng)跳轉(zhuǎn)到另外一個(gè)目標(biāo)頁面。系統(tǒng)的\Think\Controller類內(nèi)置了兩個(gè)跳轉(zhuǎn)方法success()和error(),用于頁面跳轉(zhuǎn)提示,并且可以支持ajax提交。?【教師】通過多媒體展示例14-8,演示頁面跳轉(zhuǎn)的實(shí)現(xiàn)的操作本例通過頁面跳轉(zhuǎn)的實(shí)現(xiàn),來學(xué)習(xí)success()和error()方法在實(shí)際項(xiàng)目中的應(yīng)用。(1)在網(wǎng)站根目錄下新建文件夾“08”,將例14-7中的素材文件“07”目錄下的文件全部拷貝到“08”文件夾中(2)打開Home模塊Controller目錄下的控制器文件“UserController.class.php”,在其中定義demo()方法和demo1()方法……(詳見教材)?【學(xué)生】觀看、理解、記憶讀者可將demo1()方法中的“$a=true;”修改為“$a=false;”,然后測試“失敗跳轉(zhuǎn)”的運(yùn)行結(jié)果。上述代碼中用到了success()和error()方法,二者用法相同,其中的第一個(gè)參數(shù)表示提示信息,第二個(gè)參數(shù)表示跳轉(zhuǎn)地址,第三個(gè)參數(shù)表示跳轉(zhuǎn)時(shí)間(單位為秒),例如,對于語句:$this->success('添加成功!',U('User/index'),5);,“添加成功!”表示提示信息,“U('User/index')”表示添加成功后跳轉(zhuǎn)到的地址,“5”表示自動(dòng)跳轉(zhuǎn)時(shí)間。此處重點(diǎn)說一下U()函數(shù),它用于動(dòng)態(tài)生成URL地址,可以確保項(xiàng)目在移植過程中不受環(huán)境影響。U()方法的定義規(guī)則如下(方括號內(nèi)參數(shù)根據(jù)實(shí)際應(yīng)用決定):U('地址表達(dá)式',['參數(shù)'],['偽靜態(tài)后綴'],['顯示域名'])地址表達(dá)式的格式定義如下:[模塊/控制器/操作#錨點(diǎn)@域名]?參數(shù)1=值1&參數(shù)2=值2...如果未定義模塊,就表示當(dāng)前模塊名稱,下面是一些簡單的例子:U('User/add') //生成User控制器的add操作的URL地址U('Blog/read?id=1') //生成Blog控制器的read操作并且id為1的URL地址U('Admin/User/select') //生成Admin模塊的User控制器的select操作的URL地址【學(xué)生】聆聽、思考、記錄【教師】講解ThinkPHP模型的定義與使用14.6ThinkPHP的模型ThinkPHP中的基礎(chǔ)模型類是Think\Model類,位于ThinkPHP核心文件“Library\Think\

Model”目錄下。該類能夠完成基本的CURD操作和統(tǒng)計(jì)查詢。基礎(chǔ)模型類的設(shè)計(jì)非常靈活,無須進(jìn)行任何模型定義,就可以進(jìn)行相關(guān)數(shù)據(jù)表的CURD操作,只有在需要實(shí)現(xiàn)相對復(fù)雜的操作時(shí),才需要自定義模型類。14.6.1模型的定義模型類通常需要繼承系統(tǒng)的Think\Model類或其子類,其定義格式如下:namespaceHome\Model;useThink\Model;classUserModelextendsModel{}上述代碼是Home\Model\UserModel類的定義。模型類的主要作用是操作數(shù)據(jù)表,如果按照系統(tǒng)的規(guī)范來命名模型類,大多數(shù)情況下可以自動(dòng)對應(yīng)數(shù)據(jù)表。模型類的命名規(guī)則是除去表前綴的數(shù)據(jù)表名稱,采用駝峰命名法命名,并且首字母大寫,然后加上模型層的名稱(默認(rèn)定義是Model)。例如,UserModel表示模型類名,其對應(yīng)的數(shù)據(jù)表應(yīng)該是think_user(此處假設(shè)數(shù)據(jù)庫的前綴定義是think_);而UserTypeModel應(yīng)該對應(yīng)數(shù)據(jù)表think_user_type。?【教師】通過多媒體展示“數(shù)據(jù)表名稱的屬性定義”表格,并進(jìn)行介紹除此之外,在ThinkPHP的模型里面,還有幾個(gè)關(guān)于數(shù)據(jù)表名稱的屬性定義,如表所示。數(shù)據(jù)表名稱的屬性定義屬性說明tablePrefix定義模型對應(yīng)數(shù)據(jù)表的前綴,如果未定義則獲取配置文件中的DB_PREFIX參數(shù)tableName不包含表前綴的數(shù)據(jù)表名稱,一般情況下默認(rèn)和模型名稱相同,只有當(dāng)表名和當(dāng)前模型類名稱不同時(shí)才需要定義trueTableName包含前綴的數(shù)據(jù)表名稱,也就是數(shù)據(jù)庫中的實(shí)際表名,該名稱無須設(shè)置,只有當(dāng)上面的規(guī)則都不適用或者特殊情況下才需要設(shè)置dbName定義模型當(dāng)前對應(yīng)的數(shù)據(jù)庫名稱,只有在當(dāng)前模型類對應(yīng)的數(shù)據(jù)庫名稱和配置文件不同時(shí)才需要定義為便于理解,下面進(jìn)行舉例說明。例如,在數(shù)據(jù)庫中有一個(gè)think_categories表,而定義的模型類名稱是CategoryModel,按照系統(tǒng)約定,該模型名稱是Category,對應(yīng)的數(shù)據(jù)表名稱應(yīng)該是think_category(全部小寫),但是現(xiàn)在的數(shù)據(jù)表名稱是think_categories,因此就需要設(shè)置tableName屬性來改變默認(rèn)的規(guī)則(假設(shè)已經(jīng)在配置文件中定義了DB_PREFIX為think_)。代碼如下:namespaceHome\Model;useThink\Model;classCategoryModelextendsModel{ protected$tableName='categories';}【學(xué)生】聆聽、思考、記錄通過教師的講解和演示,使學(xué)生了解ThinkPHP的控制器的定義與使用,以及ThinkPHP模型的定義第二節(jié)課問題導(dǎo)入(5min)【教師】提出以下問題:通過學(xué)習(xí),我們已經(jīng)了解模型的定義,那么如何使用模型呢?【學(xué)生】思考、舉手回答通過問題導(dǎo)入,引導(dǎo)學(xué)生主動(dòng)思考,激發(fā)學(xué)生的學(xué)習(xí)興趣傳授新知(20min)【教師】通過學(xué)生的回答引入新知,介紹PHP中實(shí)例化模型的操作,以及連接數(shù)據(jù)庫的方法14.6.2實(shí)例化模型根據(jù)不同的模型定義,有幾種實(shí)例化模型的方法,根據(jù)需要采用不同方式即可。1.實(shí)例化基礎(chǔ)模型(Model)類可以像實(shí)例化其他類庫一樣實(shí)例化基礎(chǔ)模型類,如下所示:$User=newModel('User');$User->select();//進(jìn)行其他的數(shù)據(jù)操作也可以使用M()方法快捷實(shí)例化,其效果是相同的。用法如下://使用M()方法實(shí)例化$User=M('User');//和用法$User=new\Think\Model('User');等效//執(zhí)行其他數(shù)據(jù)操作$User->select();使用M()方法實(shí)例化的時(shí)候,默認(rèn)情況下是直接實(shí)例化系統(tǒng)的\Think\Model類。2.實(shí)例化自定義模型(Model)類快捷方法D()用于自定義模型類的實(shí)例化操作,其使用方法如下://實(shí)例化模型$User=D('User');//相當(dāng)于$User=new\Home\Model\UserModel();//執(zhí)行具體的數(shù)據(jù)操作$User->select();D()方法的參數(shù)就是模型名稱,并且和模型類的大小寫定義一致,例如:User對應(yīng)的模型類文件為\Home\Model\UserModel.class.php;UserType對應(yīng)的模型類文件為\Home\Model\UserTypeModel.class.php。D()方法可以自動(dòng)檢測模型類,如果存在自定義的模型類,則實(shí)例化自定義模型類,如果不存在,則會(huì)實(shí)例化系統(tǒng)的\Think\Model基類,同時(shí)對于已實(shí)例化過的模型,不會(huì)重復(fù)實(shí)例化。?【教師】通過多媒體展示例14-9,演示使用模型讀取表數(shù)據(jù)的操作本例通過自定義模型類,并在控制器中調(diào)用模型類來實(shí)現(xiàn)讀取表數(shù)據(jù)的目的(1)在網(wǎng)站根目錄下新建文件夾“09”,將例14-7中的素材文件“07”目錄下的文件全部拷貝到“09”文件夾中(2)在數(shù)據(jù)庫“database14”中新建數(shù)據(jù)表“school_user”……(詳見教材)?【學(xué)生】觀看、理解、記憶運(yùn)行網(wǎng)頁時(shí),如果提示Undefinedclassconstant

'MYSQL_ATTR_INIT_COMMAND',需要在php.ini中開啟或添加extension=php_pdo_mysql.dll,并重啟服務(wù)器。14.6.3連接數(shù)據(jù)庫ThinkPHP內(nèi)置了抽象數(shù)據(jù)庫訪問層,把不同的數(shù)據(jù)庫操作封裝起來,所以在應(yīng)用中只需要使用公共的Db類進(jìn)行操作,而無須針對不同的數(shù)據(jù)庫編寫不同的代碼和底層實(shí)現(xiàn),Db類會(huì)自動(dòng)調(diào)用相應(yīng)的數(shù)據(jù)庫驅(qū)動(dòng)來處理。如果應(yīng)用需要使用數(shù)據(jù)庫,必須配置數(shù)據(jù)庫連接信息,數(shù)據(jù)庫的配置文件有多種定義方式。常用的配置方式是在應(yīng)用配置文件或者模塊配置文件中添加下面的配置參數(shù)://數(shù)據(jù)庫配置信息'DB_TYPE'=>'mysql',//數(shù)據(jù)庫類型'DB_HOST'=>'',//服務(wù)器地址'DB_NAME'=>'thinkphp',//數(shù)據(jù)庫名'DB_USER'=>'root', //用戶名'DB_PWD'=>'123456', //密碼'DB_PORT'=>3306, //端口'DB_PARAMS'=>array(), //數(shù)據(jù)庫連接參數(shù)'DB_PREFIX'=>'think_', //數(shù)據(jù)庫表前綴'DB_CHARSET'=>'utf8', //字符集'DB_DEBUG'=>TRUE, //數(shù)據(jù)庫調(diào)試模式開啟后可以記錄SQL日志例14-9中便采用了這種方式。數(shù)據(jù)庫的類型由DB_TYPE參數(shù)設(shè)置。ThinkPHP目前支持的數(shù)據(jù)庫類型有MySQL、PostgreSQL、SQLite、SQLServ

溫馨提示

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

評論

0/150

提交評論