本章我們主要說明ThinkPHP的基礎概況和Web服務端開發中常用的MVC結構。
一、入口檔案
在瀏覽器中輸入了http://localhost/tp5_demo/public/
這個URL表示了存取htdocs資料夾下的/tp5_demo/public/index.php文件,這是為什麼呢,我們下面來一步步分解。
當我們輸入 http://localhost 的時候,Apache就會訪問其httpd.conf檔案下指定的DocumentRoot路徑,在趙童鞋這裡就是E:/xampp7/htdocs。
而後面拼接/tp5_demo/public的意思就是存取DocumentRoot路徑下的/tp5_demo/public資料夾。
那麼最終為什麼會定位到index.php檔案呢?這是因為httpd.conf檔案裡有另一個屬性定義DirectoryIndex,這個屬性就定義了index.php、index.html等檔案作為入口檔案。 (啥?你說為啥沒圖?自己翻你們的httpd.conf檔去)
#而在ThinkPHP中,如果沒有指定存取位址,預設就會路由到index模組下的Index控制器中的index()方法。
也就是說,輸入
http://localhost/tp5_demo/public/
http://localhost/tp5_demo/public/index/index/index
#是同樣的效果。
二、控制器(Controller)
在MVC架構中,控制器一般只負責下列功能:
參數校驗
#呼叫服務
呼叫模型
輸出結果
在ThinkPHP框架中建立控制器只需要在對應的模組中的controller模組中新建一個類別。
如上圖則表示在index模組中建立了Index控制器。
而Index控制器下的index()方法即代表一個Action,在API開發中也就是一個接口,可以透過配置框架的路由URL進行綁定。
要注意的是,Action中其實不應該出現太多的邏輯操作,Action應該只是作為模型層(Model)和視圖層(View)的一個呼叫者,實際的邏輯操作應該就是放到模型層去處理,更複雜的邏輯應該放在服務層(Service)去處理,這種分層的想法就是所謂的面向切面程式設計(AOP)。
這樣做的好處就是當某個通用操作(如使用者登入、計算活動金額)改變的時候,只需要在模型中修改程式碼,並不會影響到呼叫模型的控制器程式碼。
而如果把邏輯都放在控制器中,那麼一旦需要修改程式碼的時候,就要把所有關聯到的控制器程式碼全部修改一遍。
看過把所有邏輯放在控制器,完全不用模型的項目,寫的時候不需要考慮分層,不需要考慮迭代,爽得很。
三、模型(Model)
模型定義一般為一個模型類別對應一個資料表。
服務端開發中大部分的邏輯操作其實就是在Select/Create/Update/Delete各種資料表。
一些簡單的邏輯操作,如:取得ID為75的文章資料。應該放在模型中封裝為一個方法,在控制器層去進行呼叫。
ThinkPHP框架為模型提供了許多便利功能,如:隱藏欄位、欄位修改器、分頁查詢、定義關聯關係。
我們會在後面再來詳細介紹模型與這些功能。
四、視圖(View)
視圖層就是輸出對應的HTML程式碼。
在框架中可以使用模板引擎(如:ThinkPHP自帶引擎、Smarty引擎)來進行變數替換。
但是現在服務端比較流行的都是API開發,透過API傳遞資料與前端進行交互,比較少使用視圖來進行頁面渲染。
五、路由(Route)
許多的PHP框架中都具有路由這個功能,甚至在Vue、React之類的前端框架中也加入了路由這個概念。
路由其實就是我們的訪問URL和控制器中的Action做了一個映射,如上面提到的:
http://localhost/tp5_demo/public/index/index/ index
就是存取index模組中的Index控制器下的index()方法。
我們可以來嘗試一下,在Index控制器中加入hello()方法:
#六、總結
#本章我們介紹了現在流行的MVC三大件的基本用途,以及路由的概念。
童鞋們應該大概掌握了一個後端介面的工作流程,也就是:路由->控制器->模型(->視圖)。
以上是你必須了解的ThinkPHP框架入門知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!