ThinkPhp學習筆記(一)

ThinkPhp5.0

Composer: php世界裏的包管理器

目錄結構

project  應用部署目錄
├─application           應用目錄(可設置)
│  ├─common             公共模塊目錄(可更改)
│  ├─index              模塊目錄(可更改)
│  │  ├─config.php      模塊配置文件
│  │  ├─common.php      模塊函數文件
│  │  ├─controller      控制器目錄⭐️
│  │  ├─model           模型目錄⭐️
│  │  ├─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                 命令行入口文件

架構

模型-視圖-控制器

thinkphp5.0 is based on mvc

一個控制器包含多個操作(方法),操作方法是一個URL訪問的最小單元。

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

eg: localhost:8080/in`dex.php/index/method

模型類通常完成實際的業務邏輯和數據封裝,並返回和格式無關的數據。

ThinkPHP的模型層支持多層設計,可以將模型更加細分,例如把模型層分爲邏輯層/服務層/事件層等等。

控制器調用模型類後返回的數據通過視圖組裝成不同格式的輸出

5.0的URL訪問受路由決定,如果關閉路由或者沒有匹配路由的情況下,則是基於

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

應用與模塊

clipboard.png

一個典型的應用是由多個模塊組成的,這些模塊通常都是應用目錄下面的一個子目錄,每個模塊都有自己獨立的配置文件、公共文件和類庫文件。如上index/test/test2爲三個模塊


行爲Behavior

行爲(Behavior)是在預先定義好的一個應用位置執行的一些操作。

發生作用的位置稱之爲鉤子,當應用程序運行到這個鉤子的時候,就會被攔截下來,統一執行相關的行爲。給某一個鉤子綁定相關行爲就成了一種類 AOP編程的思想。

在應用程序中進行行爲偵聽

// 在app_init位置偵聽行爲
\think\Hook::listen('app_init');

然後對某個位置進行行爲綁定:

// 綁定行爲到app_init位置
\think\Hook::add('app_init','\app\index\behavior\Test');

入口文件和引導文件

入口文件

入口文件位置的設計是爲了讓應用部署更安全,public目錄爲web可訪問目錄,其他的文件都可以放到非WEB訪問目錄下面。

一般路徑在../public/index.php

Index.php

// 應用入口文件

// 定義項目路徑
define('APP_PATH', __DIR__ . '/../application/');
// 加載框架引導文件
require __DIR__ . '/../thinkphp/start.php';

引導文件

start.php文件就是系統默認的一個引導文件。在引導文件中,會依次執行下面操作:

  • 加載系統常量定義;
  • 加載環境變量定義文件;
  • 註冊自動加載機制;
  • 註冊錯誤和異常處理機制;
  • 加載慣例配置文件;
  • 執行應用;

🤨 不要管細枝末節,往下看吧


分發請求

模塊/控制器/操作

這是默認的分發請求機制,系統會根據URL或者路由地址來判斷當前請求的模塊、控制器和操作名,並自動調用相應的訪問控制器類,執行操作對應的方法。

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

一句話概括👇:

controller用return就完事了,系統會幫你把返回的數據格式搞好然後輸出給頁面/客戶端


URL

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

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

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

關閉後就變成大小寫敏感了

模塊設計

├─application           應用目錄(可設置)
│  ├─common             公共模塊目錄(可選)
│  ├─common.php         公共函數文件
│  ├─route.php          路由配置文件
│  ├─database.php       數據庫配置文件
│  ├─config.php         應用配置文件
│  ├─module1            模塊1目錄
│  │  ├─config.php      模塊配置文件
│  │  ├─common.php      模塊函數文件
│  │  ├─controller      控制器目錄
│  │  ├─model           模型目錄(可選)
│  │  ├─view            視圖目錄(可選)
│  │  └─ ...            更多類庫目錄
│  │ 
│  ├─module2            模塊2目錄
│  │  ├─config.php      模塊配置文件
│  │  ├─common.php      模塊函數文件
│  │  ├─controller      控制器目錄
│  │  ├─model           模型目錄(可選)
│  │  ├─view            視圖目錄(可選)
│  │  └─ ...            更多類庫目錄

命名空間

有效的解決了多模塊和Composer類庫之間的命名空間衝突問題,並且實現了更加高效的類庫自動加載機制。

$studentModel = new Student(✘)
//正確寫法  
$studentModel = new \app\index\model\Student
or
use app\index\model\Student
$studentModel = new Student

Traits

作爲一種擴展機制,可以方便的實現一個類庫的多繼承問題。(看不懂👀)

數據輸出

新版的控制器輸出採用Response類統一處理

通過設置default_return_type或者動態設置不同類型的Response輸出就可以自動進行數據轉換處理

例如設爲json:

'default_return_type'=>'json'
namespace app\index\controller;

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

請求URL地址後返回

{"data":{"name":"thinkphp","url":"thinkphp.cn"},
 "code":1,
 "message":"\u64cd\u4f5c\u5b8c\u6210"}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章