定義:框架是一堆包含了常量、方法和類等代碼的集合,它是一個半成品的應用,只包含了一些項目開發的時候所使用的底層架構,並不包含業務邏輯,框架還包含了一些優秀設計模式,如單例模式、工廠模式、AR(Active Record)模式等。php
在之後實際開發的時候會有一個成型的開發流程:css
若是在上述的流程中不使用框架進行開發會遇到哪些問題?html
是重量級框架,是php語言公司出品的官方框架,可是因爲官方的考慮的功能比較全面,致使比較臃腫,啓動慢。前端
是重量級框架,是美國華人開發的框架,做者名叫薛強(英文名Qiang),中文稱之爲「易框架」,最大的特色就是將代碼的重用性發揮到了極致。目前YII框架在外企用的仍是比較多的。nginx
重量級框架,一款國外框架。thinkphp
輕量級框架,一款國外框架。編程
輕量級框架,簡稱CI框架,代碼火焰/火焰代碼,一款國外框架。後端
是一款國人開發的框架,目前有中文的社區、中文官網、中文幫助文檔等。在國內使用的仍是比較廣泛的。由於其有一系列中文支持,因此比較適合做爲入門級框架學習。設計模式
MVC是一個設計模式。它是強制將用戶的輸入、邏輯、輸出相分離,將整個項目分爲三個部分:控制器(C)、模型(M)、視圖(V)。數組
在整個編程開發的歷史中,一共是經歷了三個階段:
第一階段:混合編程階段
通俗的說就是咱們常說的「混編」模式。
特色:就是將php代碼和html代碼寫在一個文件中
優勢:效率高。
缺點:不易於維護,會形成一個前端人員不得不面對後端的代碼,後端人員不得不面對前端代碼。
第二階段:模版引擎階段
模版引擎典型的如smarty。
優勢:將前端的輸出和後端的邏輯代碼想相分離。
缺點:效率比第一種低。
第三階段:MVC設計階段
優勢:就是強制將用戶的輸入、邏輯、輸出相分離,在維護上簡單性提升了不少。
缺點:效率比前面2種模式都低。
ThinkPHP框架最先誕生於2006年初,最初的名字叫作FSC。於2007年元旦改名爲ThinkPHP,同時其官網上線。ThinkPHP是一款國人自主開發的框架,有中文的官網,中文的論壇,中文的幫助文檔,其中代碼中包含了豐富的中文註釋。
下載從官網下載:http://www.thinkphp.cn
目前最新版本的ThinkPHP是v5.0,目前使用的比較多的ThinkPHP3.2.3。點擊【更多】能夠查看到ThinkPHP的歷史版本:
擴展(瞭解):關於軟件版本的修飾詞
Alpha版本:內測版本,內部測試。
Beta版本:公測版本,面向用戶,由用戶去找bug。
RC版本:候選版本,軟件在這個階段就已經不會有太多的功能性調整,主要是排錯。
R版本:release版本,發行版本,穩定的版本。
下載完成以後會獲得一個zip壓縮包:
Application目錄下:
ThinkPHP目錄下:
Conf目錄下:
補充:
在ThinkPHP中除了這個convention.php配置文件以外,還有其餘的配置文件,可是convention.php這個文件是系統級別的配置文件,還有一個是應用級別的配置文件,最後還有一個分組級別的配置文件。
從做用範圍上來講:
系統 > 應用 >分組
從優先級上說:
分組 > 應用 >系統
Library目錄下:
Think目錄下:
第一步:建立站點目錄
第二步:配置Apache虛擬主機的配置文件,建立一個虛擬主機
文件位於Apache目錄下conf/extra/httpd-vhosts.conf
將以前的一段站點配置代碼複製粘貼出一段:
第三步:重啓Apache
第四步:修改hosts文件,將配置文件中聲明的2個域名作下綁定(解析)
問題:hosts文件在哪?
能夠經過在【運行】中輸入【drivers】打開目錄,而後選擇etc目錄。
能夠在cmd中經過ping命令測試域名是否綁定成功:
第五步:將代碼文件複製到站點目錄中去
在ThinkPHP壓縮包目錄中複製ThinkPHP目錄和index.php入口文件到站點根目錄中:
複製:
經過瀏覽器進行訪問:
Application目錄(此處的Application目錄和壓縮包中不同,裏面還包含了三個目錄):
Home目錄下:、
說明:在首次運行index.php入口文件的時候纔會去產生對應的目錄結構。再次運行不會產生變化。
在首次運行index.php入口文件的時候會產生相應的目錄結構,目錄的名字取決於在index.php中定義的常量APP_PATH。
在自動生成的文件夾中都有一個空白的html文件,文件名叫作index.html,這個文件咱們稱之爲目錄安全文件。其做用:
在Apache的配置文件中有options +indexes,默認展現站點目錄,若是在站點目錄中不存在index開頭的文件,則會展現目錄結構,可是有了index.html(目錄安全文件)以後就不會展現結構了。
一句話歸納就是防止列出站點的文件結構。
當咱們首次運行入口文件的時候發如今磁盤中系統給咱們生成了一些目錄,那這些目錄是如何生成的?
文件夾/文件的生成主要取決於ThinkPHP的系統流程:
在部署以後訪問會看到一個笑臉,笑臉是怎麼輸出的?
默認分組/平臺:Home
默認控制器:Index
默認方法:index
上述的默認值,能夠在系統配置文件中找到:
分組也叫模塊或者平臺。
命名規則:控制名(英文首字母大寫)+Controller關鍵詞+.class.php
例如:建立商品控制器則能夠寫成GoodsController.class.php,用戶控制器則寫成UserController.class.php。
案例:在Home分組中建立一個用戶控制器User控制器。
控制器結構代碼:
總結步驟:
第一步:聲明當前控制器(類)的命名空間;
第二步:引入父類控制器(類);
第三步:聲明控制器(類)而且繼承父類;
說明:命名空間
第一:命名空間是在php5.3版本中引入的一個概念,因此ThinkPHP3.2.3要求大於等於5.3版本的php。
第二:命名空間自己跟目錄沒有關係,可是在ThinkPHP中命名的聲明和使用必須跟目錄掛鉤。
案例:參考上述結構代碼的完善三步驟,來完善剛纔建立的user控制器。
在類中編寫一個測試方法,名字能夠起叫test:
訪問結果:
若是後期須要更多的控制器來實現功能,則只須要按照上述的建立步驟反覆的建立更多須要的控制器就行。
路由:是指訪問項目中具體某個方法的URL地址。
在ThinkPHP中系統提供了4種路由形式:
路由形式:http://網址/入庫文件?m=分組名&c=控制器名&a=方法名&參數名=參數值
例如:訪問Home分組下的User控制器中的test方法,而且傳遞一個參數,id=1
http://1006.com/index.php?m=Home&c=User&a=test&id=1
問題:URL傳遞的任何東西都會在URL地址欄中顯示出來,既不安全也很差看。
路由形式:http://網址/入口文件/分組名/控制器名/方法/參數名1/參數值1/參數名2/參數值2
例如:訪問Home分組下的User控制器中的test方法,而且傳遞一個參數,id=1
http://1006.com/index.php/Home/User/test/id/100
路由形式:http://網址/分組名/控制器名/方法/參數名1/參數值1/參數名2/參數值2
和ThinkPHP默認的路由形式相比就是隻缺乏了入口文件。
例如:訪問Home分組下的User控制器中的test方法,而且傳遞一個參數,id=1
http://1006.com/Home/User/test/id/100
注意:該路由形式不能直接使用,須要配置完成才能使用。
配置步驟
第一步:須要修改Apache配置文件httpd.conf,開啓重寫模塊,去掉以前的註釋符
第二步:須要修改虛擬主機配置文件,給須要開啓重寫的站點目錄配置處添加allowoverride,而且值是all
第三步:如修改了Apache配置文件,則還須要從新啓動Apache
第四步:將ThinkPHP壓縮包中的.htaccess文件複製到入口文件的同級目錄
注意:php一共擁有好幾個運行模式,每一個運行模式的使用.htaccess文件的方法可能不同。
這種路由形式須要Apache的支持,而除了Apache軟件以外服務器軟件還有nginx、lightd等等,因此第三種路由形式通常狀況下不推薦使用。
路由形式:http://網址/入口文件?s=/分組名/控制器名/方法名/參數名1/參數值1
問題:兼容路由形式有幾個參數?
答:上述路由形式只有1個參數,參數名是s,等於號後面的都是s參數的值
例如:訪問Home分組下的User控制器中的test方法,而且傳遞一個參數,id=10086
http://1006.com/index.php?s=/Home/User/test/id/10086
路由形式在ThinkPHP系統中的配置文件是有體現的,
特別說明:路由形式的配置值,不影響咱們在地址欄中直接輸入其餘形式路由訪問。該配置項的值影響的是ThinkPHP系統封裝的URL組裝函數(U函數)的生成url地址的形式。
分組:通常的項目都會根據某個功能的使用對象來區分代碼,這個時候放到一塊兒以後會造成一個文件夾,這個文件夾就能夠稱之爲分組。分組就是咱們一般所指的平臺(前臺、後臺)。
例如在剛部署好的ThinkPHP系統中Home目錄就是一個分組目錄。後期若是須要使用更多的分組,則須要本身去建立分組。
如何去建立分組?
步驟:參考Home分組的目錄結構,從新建立一個新的目錄,在其中依照Home中的結構,建立對應的目錄便可。
第一步:建立一個分組的目錄,目錄與Home目錄同級
第二步:建立Admin目錄中的文件結構
分組建立好以後,能夠在Admin分組中編寫一個控制器,而後編寫方法進行測試訪問:
編寫結構代碼:
編寫測試方法:
分組的URL訪問路由:
當前測試方法訪問地址:
http://1006.com/index.php/Admin/Test/test
若是須要建立多個分組,參考以上的步驟,反覆建立對應的目錄結構就行。
Url組裝就是根據某個規則,來組成一個url地址,這個功能就叫作url組裝。
在ThinkPHP中,系統提供了一個封裝的函數來處理url的組裝,這個方法叫作U方法。
U方法是系統提供的快速方法,除了U方法這樣大寫字母的方法以外,還有一些其餘的快速方法如:A、B、C、D、E、F、G、I、M、R、S。這些方法都定義在系統的函數庫文件中(functions.php)
U語法格式:
U(‘URL路徑’,參數數組);
例如:要使用U方法組裝出當前控制器下index方法地址,則能夠寫成
U(‘index’);
再例如:使用U方法組裝出另一個控制器Index中的index的地址,則能夠寫成:
U(‘Index/index’);
若是須要給指定的頁面添加參數,好比給Index控制器下的index方法傳遞一個id=100
U(‘Index/index’,array(‘id’ => 100));
總結出一個通用的格式:
U(‘[分組名/控制器名/]方法名’,array(‘參數名1’ => 參數值1,’參數名2’ => 參數值2));
在ThinkPHP中系統有2個跳轉方法,分別是成功跳轉和失敗跳轉:
成功:
$this -> success(跳轉提示,跳轉地址,等待時間);
失敗:
$this -> error(跳轉提示,跳轉地址,等待時間);
跳轉提示參數必需要有,後面的地址和時間能夠沒有,若是沒有指定跳轉地址,則跳轉到上一頁。
在實際使用的時候,成功跳轉會看到一個笑臉:
失敗跳轉會看到:
說明:上述案例中使用success和error方法在當前的控制器中並無定義,其是父類控制器中已經定義好的方法,因爲當前控制器繼承了父類,因此能夠直接使用。
視圖就是MVC三大組成部分中V(View),主要是負責信息的輸出和展現。
建立的位置須要是在分組目錄下的View目錄下與控制器同名的目錄中。例如Test控制器中的login方法,須要有一個模版,則該模版文件login.html須要放到View/Test/login.html
例如:建立Test控制器的test方法模版
若是有多個模版文件,則按照上面的要求進行建立。
在smarty中展現模版使用的方法是display,在ThinkPHP中一樣也是display方法。Display在ThinkPHP中的語法格式:
$this -> display();展現當前控制器下與當前請求方法名稱一致的模版文件
$this -> display(‘模版文件名[不帶後綴]’); 展現當前控制器下的指定模版文件
$this -> display(‘View目錄下的目錄名/模版文件名[不帶後綴]’); 展現指定控制器目錄下的指定模版文件
案例:
在Test控制器中的test方法中展現test.html
在Test控制器中的test1方法中展現test.html
在Test控制器中的test2方法展現View/Demo/test.html
在實際開發的時候不只僅只是展現模版這麼簡單,每每還須要展現數據,這個時候變量還在控制器的方法中,須要將數據給傳遞到模版中而且展現,這個過程叫作變量分配。
在ThinkPHP中系統封裝好了一個變量的分配方法,這個方法叫作assign。具體語法:
$this -> assign(‘模版中變量名’,$php中的變量名);
說明:通常狀況兩個參數的變量都是同樣的。
案例:在test控制器中的test方法中傳遞一個變量給test.html展現。
目前已經將var變量傳遞給了模版文件test.html,在模板文件中如何去展現數據?
在ThinkPHP中默認的展現基本變量方法以下:
{$模版中的變量名}
展現效果:
在ThinkPHP中默認的變量左右分割符是{和},其是能夠被更改的,能夠在配置文件中找到具體的配置項:
在實際開發的時候會出現一個這樣的問題:在引入圖片、css、js文件的時候,每每須要寫一些比較複雜的路徑,因此這個時候咱們比較但願能有一些特殊的常量將很長很複雜的路徑簡單化,這個時候能夠考拉使用模版常量替換的機制。
在ThinkPHP中系統默認給咱們提供如下幾個經常使用的模版常量:
__MODULE__:表示從域名後面開始一直到分組名結束的路由
__CONTROLLER__:表示從域名後面開始一直到控制器結束的路由
__ACTION__:表示從域名後面開始一直到方法名結束的路由
__PUBLIC__:站點根目錄下的Public目錄的路由
__SELF__:表示從域名後面開始一直到路由的最後(若是沒有參數,則__SELF__和__ACTION__所表達的內容是同樣的)
具體的輸出:
爲何上述的幾個常量就能夠表示上面輸出的這些路由呢?
答:在ThinkPHP中「模版常量」是經過模版內容替換機制來實現的,並不是是常量的定義。替換機制能夠查看行爲文件ContentReplace.Behaviour.class.php
其模版常量的實現核心就是字符串的替換。
爲了後期使用的方便,咱們能夠在配置文件中定義一個自定義的模版常量:
說明:在開發的時候,不到萬不得已不要去修改系統配置文件。能夠將須要修改的配置項在分組/應用級別的配置文件中去定義:
測試:
控制器:PublicController.class.php
方法:login
模版文件:login.html
第一步:建立控制器文件,而且編寫結構代碼
第二步:編寫方法login,展現模版文件login.html
第三步:將模版文件複製到指定的位置
位置:./Application/Admin/View/Public/login.html
第四步:將相應的靜態資源文件複製到指定的位置
位置:/Public/Admin
第五步:修改模版文件login.html中的靜態資源文件的引入路徑
顯示效果:
實現今天的綜合案例。複習所講的知識點。