TP 5.0 架構 簡介


TP 5.0 架構 簡介


thinkphp 5.0 為API開發而設計的的高性能框架,是與以往thinkphp5.0以下版本大不相同的新型框架,病對以顛覆和重構版本,采用全新的架構思想,引入了更多的PHP新特性,優化了核心,減少了依賴,實現了真正的惰性加載,支持composer,並針對API開發做了大量的優化,包括路由、日志、異常、模型、數據庫、模板引擎和驗證等模塊都已經重構(因此無法直接從3.0版本直接升級,同時用過laravel的同學可以發現,tp5.0很多方面都與它相似,極大地提升了開發者的開發效率)


安裝
  • 第一種很傳統的方式,官網下載框架代碼,直接運行在web目錄中即可
  • 第二種 安裝好composer, 通過composer命令下載(tp5.0 支持composer依賴管理工具,在 Windows 中,你需要下載並運行 Composer-Setup.exe 或者訪問composer中文網] ,運用composer命令開發就更加方便)
composer create-project topthink/think=5.0.* tp5  --prefer-dist
  • 第三種 通過git 通過代碼倉庫clone 框架代碼即可

首先克隆下載應用項目倉庫

git clone https://github.com/top-think/think tp5

然后切換到tp5目錄下面,再克隆核心框架倉庫:

git clone https://github.com/top-think/framework thinkphp

瀏覽器中輸入訪問地址(tp5與laravel5.6相同,項目訪問目錄為/public)

http://localhost/tp5/public/

目錄結構總覽(截至tp5文檔)
project  應用部署目錄
├─application           應用目錄(可設置)
│  ├─common             公共模塊目錄(可更改)
│  ├─index              模塊目錄(可更改)一個典型的應用是由多個模塊組成的,這些模塊通常都是應用目錄下面的一個子目錄,每個模塊都有自己獨立的配置文件、公共文件和類庫文件。
│  │  ├─config.php      模塊配置文件
│  │  ├─common.php      模塊函數文件
│  │  ├─controller      控制器目錄(5.0的控制器類比較靈活,可以無需繼承任何基礎類庫,控制器主要負責請求的接收,並調用相關的模型處理,並最終通過視圖輸出。嚴格來說,控制器不應該過多的介入業務邏輯處理)
│  │  ├─model           模型目錄(型類通常完成實際的業務邏輯和數據封裝,並返回和格式無關的數據,模型類並不一定要訪問數據庫,而且在5.0的架構設計中,只有進行實際的數據庫查詢操作的時候,才會進行數據庫的連接,是真正的惰性連接)
│  │  ├─view            視圖目錄(控制器調用模型類后返回的數據通過視圖組裝成不同格式的輸出。視圖根據不同的需求,來決定調用模板引擎進行內容解析后輸出還是直接輸出。視圖通常會有一系列的模板文件對應不同的控制器和操作方法,並且支持動態設置模板目錄)
│  │  └─ ...            更多類庫目錄
│  ├─command.php        命令行工具配置文件
│  ├─common.php         應用公共(函數)文件
│  ├─config.php         應用(公共)配置文件
│  ├─database.php       數據庫配置文件
│  ├─tags.php           應用行為擴展定義文件
│  └─route.php          路由配置文件
├─extend                擴展類庫目錄(可定義)
├─public                WEB 部署目錄(對外訪問目錄)
│  ├─static             靜態資源存放目錄(css,js,image)
│  ├─index.php          應用入口文件
│  ├─router.php         快速測試文件
│  └─.htaccess          用於 apache 的重寫
├─runtime               應用的運行時目錄(可寫,可設置)
├─vendor                第三方類庫目錄(Composer)
├─thinkphp              框架系統目錄
│  ├─lang               語言包目錄
│  ├─library            框架核心類庫目錄
│  │  ├─think           Think 類庫包目錄
│  │  └─traits          系統 Traits 目錄
│  ├─tpl                系統模板目錄
│  ├─.htaccess          用於 apache 的重寫
│  ├─.travis.yml        CI 定義文件
│  ├─base.php           基礎定義文件
│  ├─composer.json      composer 定義文件
│  ├─console.php        控制台入口文件
│  ├─convention.php     慣例配置文件
│  ├─helper.php         助手函數文件(可選)
│  ├─LICENSE.txt        授權說明文件
│  ├─phpunit.xml        單元測試配置文件
│  ├─README.md          README 文件
│  └─start.php          框架引導文件
├─build.php             自動生成定義文件(參考)
├─composer.json         composer 定義文件
├─LICENSE.txt           授權說明文件
├─README.md             README 文件
├─think                 命令行入口文件

生命周期
  1. 入口文件:用戶發起的請求都會經過應用的入口文件,通常是 public/index.php文件;thinkphp5.0采用的單一入口模式進行項目部署和訪問,每個應用都有一個統一的但不一定唯一(你也可以更改或者增加新的入口文件)的入口;入口文件位置的設計是為了讓應用部署更安全,public目錄為web可訪問目錄,其他的文件都可以放到非WEB訪問目錄下面;入口文件主要完成:定義框架路徑、項目路徑(可選),定義系統相關常量(可選),載入框架入口文件(必須)。
// 定義應用目錄
define('APP_PATH', __DIR__ . '/../application/');
// 加載框架引導文件
require __DIR__ . '/../thinkphp/start.php';
  1. 引導文件:依次執行下面操作 ,加載系統常量定義;加載環境變量定義文件;注冊自動加載機制;注冊錯誤和異常處理機制;加載慣例配置文件;執行應用;

  2. 注冊自動加載:系統會調用 Loader::register()方法注冊自動加載,在這一步完成后,所有符合規范的類庫(包括Composer依賴加載的第三方類庫)都將自動加載

  3. 注冊錯誤和異常機制

  4. 應用初始化

  5. URL訪問檢測

  6. 路由檢測

  7. 分發請求:在完成了URL檢測和路由檢測之后,路由器會分發請求到對應的路由地址,這也是應用請求的生命周期中最重要的一個環節。在這一步驟中,完成應用的業務邏輯及數據返回。

  8. 響應輸出:控制器的所有操作方法都是return返回而不是直接輸出,系統會調用Response::send方法將最終的應用返回的數據輸出到頁面或者客戶端,並自動轉換成default_return_type參數配置的格式。所以,應用執行的數據輸出只需要返回一個正常的PHP數據即可。

  9. 應用結束


URL

在沒有開啟路由時,訪問路由的方式如下:

http://serverName/index.php(或者其它應用入口文件)/模塊/控制器/操作/[參數名/參數值...]

>php.exe index.php(或者其它應用入口文件) 模塊/控制器/操作/[參數名/參數值...]

URL大小寫

默認情況,url不區分大小寫,也就是說URL里面的模塊/控制器/操作名會自動轉換為小寫,控制器在最后調用的時候會轉換為駝峰法處理。

// URL不區分大小寫情況下,如果要訪問駝峰法的控制器類,則需要使用:
http://localhost/index.php/Index/blog_test/read

// 模塊名和操作名會直接轉換為小寫處理。

如果希望URL訪問嚴格區分大小寫,可以在應用配置文件中設置:

// 關閉URL中控制器和操作名的自動轉換
'url_convert'    =>  false,


//一旦關閉自動轉換,URL地址中的控制器名就變成大小寫敏感了,例如前面的訪問地址就要寫成:

http://localhost/index.php/Index/BlogTest/read
//但是下面的URL訪問依然是有效的:

http://localhost/index.php/Index/blog_test/read
//下面的URL訪問則無效:

http://localhost/index.php/Index/blogtest/read

//需要注意:路由規則中定義的路由地址是按照控制器名的實際名稱定義(區分大小寫)。

API
  1. 新版的控制器輸出采用Response類統一處理,而不是直接在控制器中進行輸出,通過設置default_return_type或者動態設置不同類型的Response輸出就可以自動進行數據轉換處理
'default_return_type'=>'json'

// 方法中直接return 即可

public function index()
{
    $data = ['name'=>'thinkphp','url'=>'thinkphp.cn'];
    return ['data'=>$data,'code'=>1,'message'=>'操作完成'];
}

// 返回前端數據則為:
{"data":{"name":"thinkphp","url":"thinkphp.cn"},"code":1,"message":"\u64cd\u4f5c\u5b8c\u6210"}
  1. 明確指定輸出類型的方式輸出
// 如果需要指定數據類型返回則只需要再控制器中修改對應類型即可(核心支持的數據類型包括view、xml、json和jsonp,其他類型的需要自己擴展。),如下:

 public function index()
{
    $data = ['name'=>'thinkphp','url'=>'thinkphp.cn'];
    // 指定json數據輸出
    // return json(['data'=>$data,'code'=>1,'message'=>'操作完成']);
    // 指定xml數據輸出
    return xml(['data'=>$data,'code'=>1,'message'=>'操作完成']);
}

錯誤調試

由於API開發不方便在客戶端進行開發調試,但ThinkPHP5的Trace調試功能支持Socket在內的方式,可以實現遠程的開發調試。

'app_trace' => true,
'trace'     => [
    'type'             => 'socket', 
    // socket服務器
    'host'             => 'slog.thinkphp.cn',
],


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM