tp框架學(xué)習(xí)筆記啊_第1頁
tp框架學(xué)習(xí)筆記啊_第2頁
tp框架學(xué)習(xí)筆記啊_第3頁
tp框架學(xué)習(xí)筆記啊_第4頁
tp框架學(xué)習(xí)筆記啊_第5頁
已閱讀5頁,還剩73頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、ThinkPHPphp框架真實(shí)項(xiàng)目開發(fā)步驟:1. 多人同時(shí)開發(fā)項(xiàng)目,協(xié)作開發(fā)項(xiàng)目、分工合理、效率有提高(代碼風(fēng)格不一樣、分工不好)2. 測(cè)試階段3. 上線運(yùn)行4. 對(duì)項(xiàng)目進(jìn)行維護(hù)、修改、升級(jí)(單個(gè)人維護(hù)項(xiàng)目,十分困難,代碼風(fēng)格不一樣)5. 項(xiàng)目穩(wěn)定的運(yùn)行階段6. 項(xiàng)目停止運(yùn)行(舊項(xiàng)目的人員已經(jīng)全部離職,新人開發(fā)新項(xiàng)目)問題:1. 多人開發(fā)項(xiàng)目,分工不合理,(html php mysql)2. 代碼風(fēng)格不一樣,后期維護(hù)十分困難3. 項(xiàng)目生命周期十分短,項(xiàng)目生命沒有延續(xù)性,造成資源浪費(fèi)、人員浪費(fèi)4. 項(xiàng)目不能很好適應(yīng)客戶需求,牽一發(fā)而動(dòng)全身。其他相關(guān)框架1. zendframework zend

2、php語言公司發(fā)布的官方框架,重量級(jí)(功能多)2. yii 美國(guó)華人開發(fā)的框架,xue qiang, qiang, 重量級(jí)框架,純OOP框架3. CI CodeIgniter 輕量級(jí)框架,開發(fā)速度快,部署靈活4. cakephp 外國(guó)框架,重量級(jí),速度慢5. symfony 外國(guó)重量級(jí)框架6. ThinkPHP 輕量級(jí)框架,國(guó)人框架,入門容易什么框架:一堆代碼的集合,里邊有變量、函數(shù)、類、常量,里邊也有許多設(shè)計(jì)模式MVC、AR數(shù)據(jù)庫(kù)、單例等等??蚣芸梢怨?jié)省我們50-60%的工作量,我們?nèi)烤Χ技性跇I(yè)務(wù)層次。為什么使用框架l 框架可以幫組我們快速、穩(wěn)定、高效搭建程序系統(tǒng)l 該系統(tǒng)由于框架的使

3、用使得本身的維護(hù)性、靈活性、適應(yīng)客戶需求方面得到最大化的增強(qiáng)。l 使用框架的過程中可以使得我們的注意力全部集中業(yè)務(wù)層面,而無需關(guān)心程序的底層架構(gòu)?!臼褂每蚣堋縯hinkphp 3.2版本【框架項(xiàng)目部署】shop商城項(xiàng)目book圖書管理系統(tǒng)car汽車銷售系統(tǒng)三個(gè)項(xiàng)目可以使用一個(gè)公共的tp框架。步驟:1. 創(chuàng)建一個(gè)入口文件index.php2. 項(xiàng)目自動(dòng)創(chuàng)建目錄3. 訪問入口文件的同時(shí)系統(tǒng)會(huì)自動(dòng)把對(duì)應(yīng)的文件創(chuàng)建出來【控制器和對(duì)應(yīng)方法創(chuàng)建】【路由解析】通過url地址get參數(shù)找到指定的控制器,并進(jìn)行對(duì)應(yīng)方法調(diào)用請(qǐng)求http:/網(wǎng)址/index.php?m=模塊名稱&c=控制器&a=方

4、法以上url地址信息代碼不夠優(yōu)雅、不安全。tp框架url地址可以由以下四種1. http:/網(wǎng)址/index.php?m=XX&c=XX&a=XX 基本get模式2. http:/網(wǎng)址/index.php/模塊/控制器/操作方法 路徑模式pathinfo3. http:/網(wǎng)址/模塊/控制器/操作方法 rewrite重寫模式4. http:/網(wǎng)址/index.php?s=/模塊/控制器/方法 兼容模式具體url地址模式設(shè)置(配置文件ThinkPHP/Conf/convertion.php)URL_MODEL = 0/1/2/3 分別代表四種url地址模式config.php是我們

5、當(dāng)前自己項(xiàng)目的配置文件,我們可以通過修改該文件達(dá)到配置變量的目錄這個(gè)文件在系統(tǒng)運(yùn)行過程中會(huì)覆蓋convertion.php的配置變量include “convertion.php”;include “config.php”; 后引入的文件要把先引入的文件配置變量給覆蓋掉我們系統(tǒng)有兼容4中url地址模式的使用系統(tǒng)有的時(shí)候會(huì)自動(dòng)創(chuàng)建url地址,它會(huì)根據(jù)當(dāng)前模式進(jìn)行url地址創(chuàng)建使用U(); 創(chuàng)建url地址在入口文件index.php調(diào)整當(dāng)前模式為開發(fā)調(diào)試模式:通過url地址模式我們學(xué)習(xí)到了以下內(nèi)容:1. 我們學(xué)習(xí)到了配置變量(核心配置變量conversion.php、當(dāng)前應(yīng)用配置變量config.

6、php)2. 快捷函數(shù)U(“模塊/控制器/方法”) 根據(jù)參數(shù)和url模式 創(chuàng)建對(duì)應(yīng)的url地址3. 把框架的模式調(diào)整為開發(fā)調(diào)試模式【開發(fā)、生產(chǎn)模式】開發(fā)調(diào)試模式:系統(tǒng)需要加載24個(gè)文件 index.php define(“APP_DEBUG”,true);生產(chǎn)模式:系統(tǒng)只需要加載很少的7個(gè)文件 index.php define(“APP_DEBUG”,false);節(jié)省了許多文件的開發(fā)、關(guān)閉的系統(tǒng)開銷,節(jié)省資源觀察系統(tǒng)運(yùn)行過程中生成的日志信息:1. 做變量配置,convertion.php , config.php2. tp框架配置變量:convertion.php Behavior行為文件

7、程序靈活設(shè)置Behavior 行為:ThinkPHP/Library/Behavior/*$option里邊的信息是可以直接通過config.php進(jìn)行修改的【控制器調(diào)用視圖view模板】控制器-視圖APP_DEBUG = true; 調(diào)試模式錯(cuò)誤信息顯示更詳細(xì)控制器和模板的關(guān)系通常:在view目錄通常會(huì)有一個(gè)與控制器標(biāo)志一樣的目錄,里邊有具體模板文件例如GoodsController.class.php 控制 在view目錄有Goods目錄,里邊都是Goods控制器對(duì)應(yīng)的模板文件【視圖模板與項(xiàng)目進(jìn)行整合】1. 引入靜態(tài)代碼2. 引入css、image、jsa) 以上3樣?xùn)|西,瀏覽器需要發(fā)送單

8、獨(dú)的http請(qǐng)求b)引入css的時(shí)候,以User控制器標(biāo)志作為當(dāng)前目錄,顯然不行以上目錄設(shè)置不利于后期維護(hù),例如其中的目錄有修改,就需要全部都修改,有很多重復(fù)勞動(dòng)優(yōu)化后:利用常量把路徑給定義好,后期只維護(hù)一個(gè)常量即可tp框架默認(rèn)引擎的常量使用模板與tp框架整合1. 引入靜態(tài)代碼2. 引入css、img、js文件3. 在入口文件地方把css、img、js的路徑設(shè)置常量4. 在模板中通過常量獲得具體的css、img等文件信息(后期重復(fù)步驟)5. 把css文件本身的圖片路徑設(shè)置正確(獲得圖片的相對(duì)位置是本身自己css文件)【url地址大小寫設(shè)置】在config.php里邊對(duì)url大小寫敏感進(jìn)行設(shè)置引

9、入文件:include “hello.php”; include(“Hello.php”); 實(shí)際都會(huì)把指定文件找到hello.phptp框架本身自己做了額外設(shè)置 :include (“hello.php”) include “Hello.php”; 表示需要引入兩個(gè)不同文件總結(jié):1. 創(chuàng)建應(yīng)用index.php入口文件2. 創(chuàng)建控制器和視圖模板3. 控制器和真實(shí)模板進(jìn)行整合(css img js)4. 配置文件:a) convertion.phpb) config.php shop/Common/Conf/config.php (針對(duì)所有分組模塊都起作用)c) config.php shop

10、/Home/Common/Conf/config.php (針對(duì)Home分組模塊起作用)【空操作和空控制器使用】空操作:就沒有指定的操作方法空控制器:沒有指定控制器http:/網(wǎng)址/index.php/Home/User/loginhttp:/網(wǎng)址/index.php/Home/User/hello 空操作http:/網(wǎng)址/index.php/Home/beijing/login 空控制器空操作:一般網(wǎng)站處于安全考慮不給用戶提示任何錯(cuò)誤信息“空操作”本質(zhì)意思:一個(gè)對(duì)象(控制器)調(diào)用本身不存在的方法在OOP里邊,對(duì)象調(diào)用本身不存在方法,處于用戶體驗(yàn)比較好的角度考慮,我們可以在類里邊制作一個(gè)魔術(shù)方

11、法:function _call();普通控制器父類的位置:空操作有兩種解決方案: 在對(duì)應(yīng)的控制器里邊制作一個(gè)方法,名稱為”_empty”,這個(gè)控制器的空操作都會(huì)自動(dòng)執(zhí)行該方法。(推薦使用) 給空操作的名稱制作一個(gè)同名的模板出來,系統(tǒng)會(huì)自動(dòng)調(diào)用空控制器http:/網(wǎng)址/index.php/Home/tianjin/login空控制器:在實(shí)例化控制器對(duì)象的時(shí)候,沒有找到指定的類什么時(shí)候?qū)嵗刂破鲗?duì)象:ThinkPHP/Library/Think/App.class.php熟記文件:index.php 入口文件ThinkPHP/ThinkPHP.php 框架核心文件ThinkPHP/Librar

12、y/Think/Think.class.php 框架核心文件ThinkPHP/Library/Think/App.class.php 框架應(yīng)用文件App.class.php內(nèi)部包括控制器對(duì)象創(chuàng)建,以及對(duì)象調(diào)用指定的方法呈現(xiàn)內(nèi)容。快捷操作方法:空控制器處理方案:可以再制作一個(gè)控制器,名稱EmptyController.class.php在該控制器內(nèi)部其實(shí)只需要制作一個(gè)_empty()方法即可?!卷?xiàng)目分組】系統(tǒng)有前臺(tái)用戶操作界面系統(tǒng)還有后臺(tái)供公司內(nèi)部人員使用維護(hù)平臺(tái)兩者在使用的過程中就是對(duì)“控制器”、“視圖模板”、“model模型”的操作為了系統(tǒng)開發(fā)方便,及代碼部署更加合理,我們的控制器、view

13、視圖等前后臺(tái)文件不要混在起,要在物理結(jié)構(gòu)上給分開http:/網(wǎng)址/index.php/Home/控制器/操作方法 訪問Home控制器及制定操作http:/網(wǎng)址/index.php/Admin/控制器/操作方法 訪問Admin分組的控制器和操作方法【后臺(tái)登錄頁面與框架整合】控制器:ManagerController.class.phpfunction login()為后臺(tái)靜態(tài)資源目錄創(chuàng)建常量【后臺(tái)品字形框架頁面搭建】控制器:IndexController.class.php操作方法:head() left() right() index()注意:frame的src屬性通過獨(dú)立路由進(jìn)行設(shè)置獲得系統(tǒng)

14、常量信息以上錯(cuò)誤信息是tp框架給我們封裝好的錯(cuò)誤信息,我們更喜歡看我們傳統(tǒng)的錯(cuò)誤信息調(diào)整文件 ThinkPHP/Library/Think/Think.class.php內(nèi)容如下:把以上三行給注釋掉,以后看到的錯(cuò)誤就是傳統(tǒng)的錯(cuò)誤信息行為:ThinkPHP/Library/Behavior/ContentReplaceBehavior.class.php進(jìn)行的替換【跨控制器調(diào)用】一個(gè)控制器在執(zhí)行的時(shí)候,可以實(shí)例化另外一個(gè)控制,并通過對(duì)象訪問其指定方法??缈刂破髡{(diào)用可以節(jié)省我們代碼的工作量例如:有10個(gè)頁面,都要現(xiàn)實(shí)指定的數(shù)據(jù)信息顯示。比如我們網(wǎng)站的“會(huì)員數(shù)目有200萬”,這個(gè)信息需要在10個(gè)頁面

15、都顯示這個(gè)數(shù)據(jù)是通過UserController.class.php 里邊額方法number()給查詢出來的現(xiàn)在商品列表頁面也需要顯示200萬會(huì)員數(shù)目信息,那么原則上就是GoodsController.class.php里邊也有一個(gè)方法number()專門獲得會(huì)員數(shù)目的如果許多頁面都需要顯示200萬的會(huì)員數(shù)據(jù),則許多控制器都需要有number()方法。如果大家都能實(shí)例化User控制器,并調(diào)用它的number()方法,則會(huì)節(jié)省許多重復(fù)勞動(dòng)。系統(tǒng)函數(shù)庫(kù):ThinkPHP/Common/functions.phpA(“模塊/控制器標(biāo)志”) 實(shí)例化控制器對(duì)象R(模塊/控制器標(biāo)志/操作方法) 實(shí)例化對(duì)象

16、同時(shí)調(diào)用指定方法【框架執(zhí)行流程分析】tp框架內(nèi)部代碼集成:面向過程和OOP面向?qū)ο?. index.php 入口文件2. ThinkPHP/ThinkPHP.php 在php5.3版本以后 設(shè)置常量有兩種方式: const name = value; 作用域根據(jù)當(dāng)前命名空間決定 define() 作用域全局 定義了許多常量 引入核心文件Think.class.php Think:start();3. ThinkPHP/Library/Think/Think.class.php static function start() 引入系統(tǒng)核心文件 引入配置文件 如果是生成模式,還會(huì)生成commonr

17、untime.php文件 如果是第一次使用系統(tǒng),還會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的應(yīng)用目錄 App:run();4. ThinkPHP/library/Think/App.class.php static function run() App:init(); 路由解析 /路由解析,把模塊、控制器、方法賦予常量 /MODULE_NAME = 模塊名稱 /CONTROLLER_NAME 控制器 /ACTION_NAME 方法 App:exec() 實(shí)例化控制器對(duì)象 利用“反射”實(shí)現(xiàn)對(duì)象調(diào)用方法利用反射實(shí)現(xiàn)對(duì)象調(diào)用方法:面向?qū)ο蟮母呒?jí)方法總結(jié):1. 空操作和空控制器處理2. 模塊項(xiàng)目分組Home Admina) h

18、ttp:/網(wǎng)址/index.php/模塊/控制器/操作方法 3. 后臺(tái)登陸和品字形框架frameset frame src4. 跨控制器調(diào)用A()R()5. 執(zhí)行流程分析(不要求)作業(yè):1. 把商城模板 和 tp框架進(jìn)行整合2. 把商城模板 的后臺(tái)在tp框架中搭建起來(模塊項(xiàng)目分組Home Admin)2014-1-20 昨天內(nèi)容回顧1. 創(chuàng)建應(yīng)用項(xiàng)目a) 入口文件index.phpb) 應(yīng)用常量定義define(“CSS_URL”,XXX);c) define(“APP_DEBUG”,true); 調(diào)整模式為開發(fā)調(diào)試模式 加載25文件d) 包含核心程序ThinkPHP/ThinkPHP.ph

19、p2. 控制器和視圖創(chuàng)建a) UserController.class.php(命名空間)b) Home/View/User/login.htmlc) Home/View/User_login.html (在配置文件convertion.php里邊有定義控制器和模板中間的連接符)d) Home/View/User_register.html3. 路由解析a) index.php?m=XX&c=YY&a=ZZ 基本get模式b) index.php/XX/YY/ZZ pathinfo路徑模式c) 網(wǎng)址/XX/YY/ZZ rewrite重寫模式,index.php被省略d) ind

20、ex.php?s=/XX/YY/ZZ 兼容模式e) echo U(“控制器/操作方法”); 查看具體url路由解析模式4. 配置文件(核心、公共、分組模塊)及函數(shù)庫(kù)文件a) 核心:ThinkPHP/Conf/convertion.phpb) 公共:shop/Common/Conf/config.phpc) 分組模塊:shop/Home/Conf/config.phpd) 上邊三個(gè)配置文件后邊的配置變量會(huì)覆蓋前邊的配置變量e) 函數(shù)庫(kù)文件:f) 核心:ThinkPHP/Common/functions.phpg) 公共:shop/Common/Common/function.phph) 分組模塊

21、:shop/Home/Common/function.php5. 模板與tp框架整合a) 拷貝模板代碼到tp框架view目錄b) 拷貝css、img、js靜態(tài)資源到tp指定目錄(shop/public)c) 在入口文件處把css、img、js路徑定義為常量d) 在模板中通過常量把靜態(tài)資源引入$Think.const.常量名e) 調(diào)整css文件里邊的圖片路徑f) 常量使用注意:在入口文件是先定義常量,再引入核心文件ThinkPHP.php6. 空操作和空控制器處理a) 空操作:在控制器中定義方法function _empty($m, $arg)b) 空控制器:定義控制器EmptyControll

22、er.class.php _empty()方法7. 項(xiàng)目分組a) Home Admin分組8. 跨控制器調(diào)用a) A(“分組模塊/控制器標(biāo)志”) 實(shí)例化控制器b) R(“分組模塊/控制器標(biāo)志/操作方法”) 實(shí)例化控制器同時(shí)直接調(diào)用指定方法c) new UserController(); 直接實(shí)例化指定的控制器9. 后臺(tái)“品”字形頁面搭建a) head left rightb) index (frameset)c) frame 里邊 src= 通過獨(dú)立路由進(jìn)行請(qǐng)求數(shù)據(jù)模型model應(yīng)用mysql數(shù)據(jù)庫(kù)操作(增、刪、改、查)【連接數(shù)據(jù)庫(kù)配置】convertion.phpconfig.php1. 在

23、config.php做數(shù)據(jù)庫(kù)連接配置2. 制作model模型a) model本身就是一個(gè)類文件b) 數(shù)據(jù)庫(kù)中的每個(gè)數(shù)據(jù)表都對(duì)應(yīng)一個(gè)model模型文件c) 最簡(jiǎn)單的數(shù)據(jù)model模型類3. 字段緩存設(shè)置tp框架執(zhí)行過程中會(huì)使用到數(shù)據(jù)表中的字段信息,通過sql語句可以查詢”show colums from table” ,處于性能考慮,可以把字段緩存,避免每次重復(fù)執(zhí)行sql語句。4. 可以根據(jù)情況對(duì)當(dāng)前的model模型進(jìn)行個(gè)性化設(shè)置5. 在入口文件定義一個(gè)調(diào)試輸出函數(shù),便于系統(tǒng)開發(fā)使用【實(shí)例化model的三種方式】1. $goods = new 命名空間GoodsModel(); 2. $good

24、s = D(模型標(biāo)志); a) $goods = D(“Goods”);b) 該$goods是父類Model的對(duì)象,但是操作的數(shù)據(jù)表還是sw_goodsc) $obj = D(); 實(shí)例化Model對(duì)象,沒有具體操作數(shù)據(jù)表,與M()方法效果一致3. $obj = M(); a) 實(shí)例化父類Modelb) 可以直接調(diào)用父類Model里邊的屬性,獲得數(shù)據(jù)庫(kù)相關(guān)操作c) 自定義model就是一個(gè)空殼,沒有必要實(shí)例化自定義modeld) $obj = M(數(shù)據(jù)表標(biāo)志); 實(shí)例化Model對(duì)象,實(shí)際操作具體的數(shù)據(jù)表$obj = D(標(biāo)志);$obj = D();$obj = M(標(biāo)志);$obj = M

25、();D()和M()方法的區(qū)別:前者是tp3.1.3里邊對(duì)new操作的簡(jiǎn)化方法;后者在使用就是實(shí)例化Model父類兩者都在函數(shù)庫(kù)文件定義ThinkPHP/Common/functions.php注意:如果沒有對(duì)應(yīng)的model模型文件類,也可以直接實(shí)例化model對(duì)象進(jìn)行操作D()和M()方法都可以實(shí)例化操作一個(gè)沒有具體model模型類文件的數(shù)據(jù)表。【數(shù)據(jù)查詢】select()是數(shù)據(jù)模型的一個(gè)指定方法,可以獲得數(shù)據(jù)表的數(shù)據(jù)信息返回一個(gè)二維數(shù)組信息,當(dāng)前數(shù)據(jù)表的全部數(shù)據(jù)信息1. 配置smartya) 配置變量信息 i. convertion.phpii. Behavior行為配置變量信息(頁面底部

26、日志顯示配置、smarty配置)iii. 系統(tǒng)程序里邊有一些零散的配置信息 b) 在config.php里邊配置smarty使用設(shè)置模板引擎配置參數(shù)位置(不能直接修改,在config.php里邊重寫):2. 具體使用(從tp引擎變?yōu)閟marty引擎)a) css樣式如果有,需要使用literal標(biāo)簽禁止smarty解析b) 關(guān)鍵字$Think 變?yōu)?$smartyc) tp引擎會(huì)對(duì)關(guān)鍵常量進(jìn)行替換例如:_CONTROLLER_ _MODULE_smarty引擎不給替換,需要設(shè)置為:$smarty.const._CONTROLLER_【各種查詢條件設(shè)置】$obj = D(); 創(chuàng)建對(duì)象$obj

27、-> select(); 查詢數(shù)據(jù)select 字段,字段 from 表名 where 條件 group 字段 having 條件 order 排序 limit 限制條數(shù);SELECT%DISTINCT%FIELD%FROM %TABLE%JOIN%WHERE%GROUP%HAVING%ORDER%LIMIT% %UNION%COMMENT%$obj -> field(字段,字段); 查詢指定字段$obj -> table(數(shù)據(jù)表); 設(shè)置具體操作數(shù)據(jù)表$obj -> where(參數(shù)); 參數(shù)就是正常sql語句where后邊的條件信息例如:( “goods_price

28、 >100 and goods_name like 三%”)$obj -> group(字段); 根據(jù)字段進(jìn)行分組查詢$obj -> having(參數(shù)條件); having 條件設(shè)置$obj -> order(price desc/asc) 排序查詢$obj -> limit(偏移量,條數(shù)) 限制查詢的條數(shù)sql語句里邊具體的條件設(shè)置在tp框架model模型里邊體現(xiàn)為具體的方法操作以上方法理論上是父類Model的對(duì)應(yīng)方法父類model具體存在方法: field() where() limit()還有一些方法在_call()自動(dòng)調(diào)用函數(shù)里邊: table() gr

29、oup() order() having()在_call()魔術(shù)方法里邊會(huì)判斷當(dāng)前的執(zhí)行方法是否是一個(gè)method屬性的元素信息,如果存在就會(huì)執(zhí)行執(zhí)行以上多個(gè)方法是同時(shí)使用多個(gè)進(jìn)行條件顯示(并且沒有順序要求)$obj -> limit(5)->field(id,name)->order(price asc) -> table(sw_goods)->select();以上許多方法執(zhí)行沒有順序要求,許多方法執(zhí)行后都是把具體的參數(shù)賦予到model屬性options里邊,最后根據(jù)options拼裝sql語句。select()方法原理追蹤總結(jié):1. config.php做數(shù)

30、據(jù)庫(kù)連接配置convertion.php2. 制作model模型文件3. 實(shí)例化model模型對(duì)象a) new 命名空間類名b) D(模型標(biāo)志);c) M(模型標(biāo)志); 4. 數(shù)據(jù)查詢select()5. 各種查詢條件設(shè)置方法6. smarty模板引擎切換(Behavior行為里邊的配置變量)【查詢數(shù)據(jù)信息】$info = $goods -> where()->field(字段)->select();select()方法1 返回一個(gè)二維數(shù)組信息2 返回全部數(shù)據(jù)表信息3 給該方法傳遞參數(shù) a) select(30) 查詢主鍵值等于30的記錄信息b) select(“10,12,

31、14”) 查詢主鍵值在10、12、14范圍的記錄信息4. find()如果我們查詢的結(jié)果只有一個(gè)信息,使用select()會(huì)返回一個(gè)二維數(shù)組為了使用方便我們會(huì)希望返回一個(gè)一維數(shù)組,這時(shí)候可使用find()方法5. having()方法設(shè)置查詢條件,where()設(shè)置查詢條件having 和 where區(qū)別i. 使用有先后順序ii. where price>100 having price>100iii. where 設(shè)置條件,字段必須是數(shù)據(jù)表中存在的字段 iv. having 設(shè)置條件,字段必須是select語句查詢出來的字段可以使用6. 相關(guān)聚合函數(shù) count() sum()

32、avg() max() min()以上聚合函數(shù)是最后被調(diào)用的方法以上方法可以結(jié)合具體條件方法使用例如:$goods -> where(goods_price >1000)->count(); 大于1000元的商品的總數(shù)目【實(shí)現(xiàn)數(shù)據(jù)添加add】select()add() 該方法返回被添加的新記錄的主鍵id值save()delete()兩種方式實(shí)現(xiàn)數(shù)據(jù)添加1. 數(shù)組方式數(shù)據(jù)添加$goods = D(“Goods”);$arr = array(goods_name=>iphone5s,goods_weight=>109);/注意:goods_name和goods_wei

33、ght是數(shù)據(jù)表中字段名稱$goods -> add($arr);2. AR方式實(shí)現(xiàn)數(shù)據(jù)添加a) ActiveRecord 活躍記錄b) AR規(guī)定了程序與數(shù)據(jù)庫(kù)之間的關(guān)系c) 什么是AR:d) 一個(gè)數(shù)據(jù)表對(duì)應(yīng)一個(gè)類modele) 一條數(shù)據(jù)記錄對(duì)應(yīng)類的一個(gè)對(duì)象f) 每個(gè)字段對(duì)應(yīng)該對(duì)象的具體屬性g) tp框架的AR是假的$goods = D(“Goods”);$goods -> goods_name = “htc_one”;$goods -> goods_price = 3000;$goods -> add();以上兩種方式:數(shù)組、AR,最后add都要把新記錄的主鍵id值返回

34、【收集表單數(shù)據(jù)入庫(kù)操作】1. 制作一個(gè)表單2. 通過$_POST收集信息3. 通過create()方法實(shí)現(xiàn)數(shù)據(jù)收集,該方法對(duì)于非法的字段會(huì)自動(dòng)進(jìn)行過濾4. 在create()收集表單方法內(nèi)部會(huì)自動(dòng)過濾非法的字段信息【數(shù)據(jù)修改操作】select()add()save() 實(shí)現(xiàn)數(shù)據(jù)修改,返回受影響的記錄條數(shù)delete()具體有兩種方式實(shí)現(xiàn)數(shù)據(jù)修改,與添加類似(數(shù)組、AR方式)1. 數(shù)組方式a) $goods = D(“Goods”);b) $ar = array(goods_id=>100,goods_name=>lenovo手機(jī),goods_price=>1200);c) $

35、goods ->where(goods_id>50)-> save($ar);2. AR方式a) $goods = D(“Goods”);b) $goods -> goods_id = 53;c) $goods -> goods_name = “三星手機(jī)”;d) $goods -> goods_price = 2000;e) $goods -> where(goods_price>10000)->save();以上兩種方式如果可行,即要修改全部數(shù)據(jù)以上sql語句從技術(shù)上可行,從業(yè)務(wù)上不可行(事故)tp框架有智能考慮,以上情況的sql語句不被

36、允許執(zhí)行。如何執(zhí)行: 明確告訴系統(tǒng)那條sql語句被update更新 可以設(shè)置where進(jìn)行sql語句更新操作save() 方法返回值0:之前沒有問題,執(zhí)行前后數(shù)據(jù)沒有變化自然數(shù):受影響的記錄條數(shù)false:執(zhí)行失敗【數(shù)據(jù)刪除及執(zhí)行原生sql語句】select()add()save() delete() 返回受影響的記錄條數(shù)$goods -> delete(30); 刪除主鍵值等于30的記錄信息$goods -> delete(“10,12,13”); 刪除主鍵值等于10 12 13的三條記錄$goods -> where(“goods_id>60”)->delet

37、e() 把符合條件的記錄都給刪除執(zhí)行原生sql語句1. 查詢語句query() 返回一個(gè)二維數(shù)組信息2. 添加、修改、刪除 execute() 返回受影響的記錄條數(shù)$goods = D(“Goods”);$sql = “select * from sw_goods”;$rst = $goods -> query($sql);$sql = “select goods_category_id,avg(goods_price) from sw_goods group by goods_category_id having avg(goods_price)>1000”;$goods -&g

38、t; query($sql);$sql = “update sw_goods set goods_name = htc_two where goods_id=100”;$goods -> execute($sql);【數(shù)據(jù)修改具體實(shí)現(xiàn)】通過路由給一個(gè)操作方法傳遞參數(shù)http:/網(wǎng)址/index.php/模塊/控制器/方法upd/變量名1/值/變量名2/值/變量名3/值 以上路由是通過get形式給指定的操作傳遞了三個(gè)參數(shù)信息原則三個(gè)參數(shù)信息接收的時(shí)候通過$_GET接收即可例如:$_GET變量名1; include()以上參數(shù)信息接收太直白,不安全,需要按照框架規(guī)則使用下邊的方式接收get參

39、數(shù)信息http:/網(wǎng)址/index.php/Admin/Goods/upd/name/tom/age/25/addr/beijingfunction upd($name,$age,$addr)$name;$age;$addr;以上參數(shù)表述,如果在請(qǐng)求的時(shí)候沒有按照規(guī)則傳遞參數(shù),那么當(dāng)前方法禁止訪問。(除非參數(shù)有默認(rèn)值)修改商品信息步驟:1. 在“修改”按鈕處把被修改商品id信息通過get形式傳遞給upd操作2. 在upd方法里邊制作形式參數(shù)$goods_id,接收服務(wù)器給傳遞的get變量goods_id3. 在修改表單里邊制作隱藏域goods_id,避免tp框架禁止修改語句執(zhí)行4. 在upd操

40、作方法內(nèi)部有兩個(gè)邏輯:展現(xiàn)表單、收集表單【表單驗(yàn)證】javascriptjquery 在服務(wù)器端通過tp框架實(shí)現(xiàn)表單驗(yàn)證用戶名、密碼、重復(fù)密碼、郵箱、qq、手機(jī)號(hào)碼、愛好、學(xué)歷具體步驟:1. 制作表單2. 表單form數(shù)據(jù)通過create()方法收集(驗(yàn)證功能要求我們必須通過create()方法收集數(shù)據(jù))3. 自定義數(shù)據(jù)model模型類實(shí)現(xiàn)具體驗(yàn)證規(guī)則驗(yàn)證規(guī)則的第4個(gè)參數(shù)說明(0 1 2):注意:1. 模型實(shí)例化通過new2. 調(diào)用create()方法才可以觸發(fā)驗(yàn)證執(zhí)行總結(jié):1. 數(shù)據(jù)添加add() 兩種方式:數(shù)組、AR2. 數(shù)據(jù)修改a) 注意:需要設(shè)置條件(主鍵id、where)3. 刪除刪

41、除 delete()4. 執(zhí)行原生sql語句:query() execute()5. 給操作方法傳遞參數(shù) /Admin/User/login/id/100/name/toma) function login($id,$name)6. 表單驗(yàn)證作業(yè):1. 在商城后臺(tái)實(shí)現(xiàn)數(shù)據(jù)的列表查詢、刪除、添加、修改2014-1-21 昨天內(nèi)容回顧1. 3種實(shí)例化model模型方法a) new 命名空間GoodsModel();b) D(“模型標(biāo)志Goods”) (之前版本會(huì)實(shí)例化自定義model對(duì)象,目前都實(shí)例化Model基類對(duì)象)i. 沒有參數(shù)實(shí)例化一個(gè)Model對(duì)象、有參數(shù)也實(shí)例化一個(gè)Model對(duì)象操作g

42、oods數(shù)據(jù)表c) M(“模型標(biāo)志Goods”)i. 沒有參數(shù)實(shí)例化一個(gè)Model對(duì)象、有參數(shù)也實(shí)例化一個(gè)Model對(duì)象操作goods數(shù)據(jù)表2. 數(shù)據(jù)庫(kù)查詢及連貫操作查詢a) select()b) select(10) 主鍵值等于10的記錄c) select(“20,21,22”) 主鍵值 in 20,21,22 的三條記錄d) find(4) 主鍵值等于4的記錄e) select()方法返回二維數(shù)組,find方法返回一維數(shù)組f) 連貫操作查詢方法:g) field() where() limit() 父類Model已經(jīng)定義好的方法h) table() group() order() grou

43、p() having() 統(tǒng)一在魔術(shù)方法_call()里邊聲明i) 以上方法可以連續(xù)操作執(zhí)行,使用沒有順序要求j) $obj -> limit(5)->where(price>100)->order(id desc)->select();3. 聚合函數(shù)使用a) count() sum() max() min() avg()b) 以上方法也是在Model的魔術(shù)方法_call()里邊定義4. 添加數(shù)據(jù)記錄add()a) 兩種方式:數(shù)組、AR操作5. 修改數(shù)據(jù)信息savea) 兩種方式:數(shù)組、AR操作b) 注意:為了修改成功必須有兩個(gè)條件之一被設(shè)置i. 信息里邊有主鍵值

44、id值被修改ii. 可以通過where設(shè)置具體哪些記錄被修改6. 刪除數(shù)據(jù)deletea) $goods -> delete(10) 主鍵值等于10的記錄信息b) $goods -> delete(“10,12,13”) 刪除三條記錄主鍵值 in 10,12,13c) $goods -> where(id>100)->delete() id>100的記錄都被刪除7. 原生sql語句執(zhí)行a) query() 執(zhí)行查詢語句,返回二維數(shù)組信息b) execute() 執(zhí)行增加、修改、刪除,返回受影響的記錄數(shù)目,返回false表示sql語句有錯(cuò)誤,返回0表示sql語

45、句執(zhí)行前后對(duì)數(shù)據(jù)沒有改變8. 表單驗(yàn)證a) 在自定義模型里邊重寫$_validateb) $_validate屬性定義時(shí)一個(gè)數(shù)組信息,內(nèi)部每個(gè)小的單元還是一個(gè)數(shù)組c) array(字段,驗(yàn)證規(guī)則,錯(cuò)誤提示,驗(yàn)證條件,附加規(guī)則,驗(yàn)證時(shí)間)d) 驗(yàn)證規(guī)則:require、emaile) 驗(yàn)證條件:i. 0 字段在$_POST里邊存在就驗(yàn)證 ii. 1 必須驗(yàn)證iii. 2 值不為空才驗(yàn)證f)附加規(guī)則:regex in callback 【用戶注冊(cè)完善】implode()把數(shù)組元素用逗號(hào)給合并起來代碼部分:【命名空間】namespace在php里邊,同一個(gè)應(yīng)用請(qǐng)求里邊如果存在兩個(gè)方法(類名),他們的

46、名字一樣(例如都是getName()),由于php本身語法規(guī)則的限制,系統(tǒng)是要報(bào)錯(cuò)的解決方法: 把他們的名字改為不一樣的 例如 agetName() bgetName() 通過命名空間解決Yii 框架為了避免名字重復(fù)引起問題,同步的類前邊都有 C 字樣1. 簡(jiǎn)單應(yīng)用a) 命名空間是虛擬的定義空間,不是真實(shí)存在目錄b) 命名空間的分隔符都是反斜杠 c) 非限定名稱:getName() 獲得與其最近的命名空間的getName()d) 限定名稱:beijinggetName() 相對(duì)方式 通過最近的命名空間定位beijinggetName()e) 完全限定名稱: beijinggetName() 直

47、接在指定的命名空間獲得具體元素f) 命名空間針對(duì):函數(shù)、類名、常量三者其作用,在命名空間里邊把這三種統(tǒng)稱為元素2. 子空間應(yīng)用3. 別名和導(dǎo)入a) 導(dǎo)入/引入 useb) 使用一個(gè)元素,使用非限定名稱,在當(dāng)前最接近的空間里邊獲得元素c) 如果當(dāng)前空間里邊沒有指定元素,也可以在導(dǎo)入的空間里邊尋找d)e) 別名應(yīng)用:f) 如果在引入空間的時(shí)候也把元素給引入了,在當(dāng)前的空間里邊也有同名字的元素,那么這個(gè)外來的元素和內(nèi)部元素要有沖突,這時(shí)可以通過別名定義來重新給外來的元素起名字并使用g)4. 公共空間a) 第一種情況b) 沒有使用namespace定義空間,當(dāng)前空間就是一個(gè)公共空間c) 例如一個(gè)有na

48、mespace的文件引入了一個(gè)沒有namespace的文件程序d) 沒有namespace的文件空間就是公共空間e) 在namespace文件里邊可以通過斜杠直接訪問公共空間元素f) function getName() -公共空間的元素g) namespace beijing;h) function getName() -beijing空間的元素i) 第二種情況j) 當(dāng)前文件沒有namespace、但是引入的文件有namespacek) 當(dāng)前文件就是公共空間,引入文件有自己空間公共空間有兩種情況:1. 當(dāng)前有空間,引入沒有空間(公共空間)a) 默認(rèn)使用當(dāng)前空間的元素b) 統(tǒng)一斜杠引入公共空間

49、元素2. 當(dāng)前沒有空間(公共空間),引入有空間a) 默認(rèn)調(diào)用當(dāng)前公共空間的元素(非限定名稱)b) 使用有公共空間的元素 (限定名稱、完全限定名稱)同一個(gè)頁面里邊有許多空間,在頁面最下邊使用上邊空間的元素,名稱需要使用完全限定名稱,還可以把上邊空間的元素給use引入過來也可通過非限定名稱或限定名稱使用命名空間使用注意:1. 針對(duì)類名、函數(shù)名、常量const其作用 define()定義的常量不受命名空間限制2. 聲明namespace的當(dāng)前腳本的第一個(gè)命名空間前面不能有任何代碼(header頭代碼也要寫在下邊)3. 命名空間是虛擬抽象的空間,不是真實(shí)存在的目錄4. 當(dāng)前文件可以include具有命

50、名空間的文件,默認(rèn)空間是當(dāng)前文件的公共空間5. 元素調(diào)用分:非限定名稱、限定名稱、完全限定名稱簡(jiǎn)單使用:同一個(gè)頁面定義了許多單級(jí)命名空間子空間:通過斜杠定義多級(jí)命名空間公共空間:為了程序比較嚴(yán)謹(jǐn),公共空間的元素都使用斜杠訪問空間引入和別名:use as【tp框架對(duì)多語言的支持】多語言設(shè)置就是通過get參數(shù)告訴當(dāng)前的請(qǐng)求使用何種語言第一次使用get變量傳遞語言,之后語言還會(huì)保存在cookie里邊,供下次使用如果get沒有傳遞語言,瀏覽器會(huì)根據(jù)當(dāng)前地區(qū)選中對(duì)應(yīng)的語言,我們程序也可以讀取瀏覽器的對(duì)應(yīng)的語言變量選擇對(duì)應(yīng)的語言設(shè)置步驟:1. 多語言通過行為Behavior支持2. 語言包一共有4種,后定

51、義的要覆蓋先定義的(類似配置文件config.php覆蓋convertion.php)3. 在config.php里邊開啟多語言支持4. 確保行為Behavior代碼執(zhí)行a) 手動(dòng)啟動(dòng)該CheckLangBehavior行為b) shop/Common/Conf/tags.php5. 語言包4個(gè)等級(jí)6. 獲得語言變量信息a) L()快捷函數(shù),可以獲得全部或指定語言變量b) 使用語言,獲得全部語言,assign()傳遞語言變量到模板進(jìn)行具體使用c) $Think.language.名稱7. 每個(gè)語言自己對(duì)應(yīng)具體的一個(gè)文件總結(jié):1. 命名空間i. namespace use ii. 非限定名稱(當(dāng)

52、前空間元素) 限定名稱(相對(duì)空間的元素) 完全限定名稱(絕對(duì)定位元素)iii. 簡(jiǎn)單使用(同一個(gè)文件定義許多命名空間)iv. 子空間(多級(jí)命名空間)v. 引入空間:空間和元素都引入、只引入空間vi. 別名使用:vii. 公共空間2. 多語言【tp框架驗(yàn)證碼支持使用】ThinkPHP/Library/Think/Verify.class.php$verify = new 命名空間Verify();$verify -> entry(); 生成一個(gè)驗(yàn)證碼一個(gè)單獨(dú)的方法生成驗(yàn)證碼驗(yàn)證碼需要在模板中使用<img src=”路由地址Manager/verifyImg” alt=” />驗(yàn)

53、證輸入的驗(yàn)證碼是否正確本身驗(yàn)證碼信息存儲(chǔ)在session里邊session存儲(chǔ)的驗(yàn)證碼是加密后的數(shù)據(jù)Verify類給我們提供了一個(gè)方法進(jìn)行驗(yàn)證碼的有效性驗(yàn)證$verify -> check(用戶輸入驗(yàn)證碼); 返回真,表示驗(yàn)證碼正確【用戶登錄實(shí)現(xiàn)】Manager判斷用戶名、密碼是否是正確的,如果是正確的,再把信息存入session里邊表示是登錄狀態(tài)舊的解決方案:select * from sw_manager where name=$name and pwd = $pwd;同時(shí)查詢用戶名和密碼的信息記錄,如果存在就是正確的,否則用戶名或密碼錯(cuò)誤該方式不安全,會(huì)增加sql語句注入的風(fēng)險(xiǎn)現(xiàn)在流行的解決方案:select * from sw_manager where

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論