後端_ThinkPHP5

weixin_33766168發表於2019-02-18

簡介
免費開源,物件導向的輕量級PHP開發框架,實現懶性載入,靈活的路由,依賴注入,請求快取,查詢語法,支援Composer.

Git安裝:

git clone https://github.com/top-think/think   再 clone https://github.com/top-think/framework 將名稱改為thinkphp
執行環境: PHP >= 5.4.0 (完美支援PHP7), PDO PHP Extension, MBstring PHP Extension  ,CURL PHP Extension 

目錄命名:

     │  ├─index              模組目錄(可更改)
     |  |project  應用部署目錄
     ├─application           應用目錄(可設定)
     │  ├─common             公共模組目錄(可更改)
     │  │  ├─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                 命令列入口檔案
     注意,如果是mac/linux環境下,請確保runtime目錄有可寫許可權,建議public目錄作為web目錄訪問內容.

命名規範:

  • 目錄使用小寫+下劃線,類庫,函式檔案統一以.php為字尾;
  • 類名和檔名保持一致,以駱駝峰命名法(首字母大寫);
  • 函式的命名使用小寫字母和下劃線的方式,方法的命名
  • 使用駱駝峰法(首字母小寫),屬性的命名使用駱駝峰(首字母小寫);
  • 常量以大寫字母和下劃命名,配置引數以小寫字母和下劃線命名

架構
ThinkPHP5.0應用基於MVC(模型-檢視-控制器)的方式來組織,MVC模式會強制使應用程式的輸入,處理和輸出分開.預設開啟路由.

    (1)應用在ThinkPHP中是一個管理系統架構以及生命週期的物件.一個應用是由多個模組組成,這些應用通常是應用目錄下面的子目錄,每個模組都有自己的獨立配置檔案,公共檔案,類庫檔案.每個模組下面擁有MVC類庫及配置檔案,一個模組都有多個控制器來負責響應請求.
    (2)控制器主要負責請求的接受,並呼叫相關的模型處理,最後通過檢視輸出.注意控制器不應該過多的介入業務邏輯處理.
    (3)start.php就是系統預設的一個引導檔案,載入系統常量定義,載入環境變數定義檔案,註冊自動載入機制,註冊錯誤和異常處理機制,載入慣例配置檔案,執行應用.
    (4)生命週期:入口檔案-->引導檔案-->註冊自動載入(系統會呼叫Loader::register()方法註冊自動載入)-->註冊錯誤和異常機制-->應用初始化-->URL訪問檢測-->路由檢測-->分發請求-->響應輸出-->應用結束.
    (5)入口檔案:所有的應用都有一個入口檔案開始,不同的應用的入口檔案是類似的.入口檔案主要完成定義框架路徑,專案路徑(可選),定義系統相關常量,載入框架入口檔案(必須)
    (6)URL訪問:ThinkPHP5.0在沒有啟用路由的情況下典型的URl訪問規則是: https;//www.baidu.com/index.php/模組/控制器/操作[引數名/引數值]. URL是不區分大小寫的,URL裡面的模組/控制器/操作名會自動轉換為小寫.

配置:

 ThinkPHP提供全域性配置功能,使用PHP返回陣列定義,支援慣例配置,公共配置,模組配置,擴充套件配置,場景配置,環境變數配置和動態配置。系統的配置引數通過靜態變數全域性獲取的,配置功能由\think\Config類完成。
 配置的載入順序:慣例配置->應用配置->擴充套件配置->場景配置->模組配置->動態配置。
 --

除錯模式和日誌

建議在開發階段一直開啟,正式部署關閉除錯模式.'app_debug' =>false, 可配置.env檔案的格式 app_debug = true 但定義之後,配置檔案中定義app_debug將無效.
優勢在於:開啟日誌記錄,錯誤資訊和除錯資訊都會詳細記錄,便於除錯,詳細記錄整個執行過程,記錄SQL日誌,通過Trace功能更好的除錯和發現錯誤.
注意:(1)關閉除錯模式還提示錯誤資訊,可以設定 "show_error_msg" => true,(2)在異常捕獲中不要使用thinkController類的error,success和redirect方法.
五種除錯:Trace除錯,變數除錯,效能除錯,SQL除錯,遠端除錯和404頁面.

  • Trace除錯功能是提供給開發人員的一個用於開發除錯的輔助工具,顯示當前頁面的操作的請求資訊,執行情況,錯誤提示並支援自定義顯示.可以設定 'app_trace' => true,可以配置修改顯示功能和顯示區域.

       基本資訊一欄顯示了當前請求的執行資訊,包括執行時間、吞吐率、記憶體開銷和檔案載入等基本資訊,通過這個頁面可以對當前的請求有一個直觀的瞭解,例如當前請求的記憶體開銷是否過大,查詢次數是否在合理的範圍之內等等。
       檔案資訊一欄則按載入順序顯示了當前請求載入的檔案列表。
       流程資訊一欄則會顯示當前請求做了哪些操作,大家可以在開發的過程中經常關注下不同頁面的請求和區別,該欄的內容開啟除錯模式後可見。
       錯誤資訊一欄會顯示頁面執行過程中的相關錯誤,包括警告錯誤(由於ThinkPHP5.0預設情況下對錯誤零容忍,所以你在正常情況下基本看不到任何錯誤,因為有任何錯誤都會直接丟擲異常)。
  • 變數除錯功能.
  • 效能除錯.
  • SQL除錯功能開啟可以在日誌檔案中看到詳細的SQL執行記錄以及效能分析.可以監聽SQL.
  • 遠端除錯

URL和路由:
路由讓URL更加規範,隱式傳入額外請求引數,統一攔截並進行許可權檢查等操作.繫結請求引數,使用請求快取,路由中介軟體支援.
採用單一入口模式訪問應用,對應用的所有請求都定向到應用的入口檔案,系統會從URL引數解析當前請求的模組,控制器和操作.路由功能由thinkRouter類完成。
路由解析的過程: 路由定義-->路由檢測-->路由解析->路由排程

  格式:http://serverName/index.php/module/controller/action/param/value/...

入口檔案:可以去掉URl地址裡面的入口檔案index.php,使用PHPStudy則修改Public下的.htaccess檔案.

<IfModule mod_rewrite.c> 
Options +FollowSymlinks -Multiviews 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] 
</IfModule>

引數傳入,通過操作方法的引數繫結功能,可以實現自動獲取URL的引數.

public function hello($name = 'world')
 {
  return $name;
 }

檢視
新建一個view/index.html 在控制器做一下修改.

use think\Controller;

class Index extends Controller
{
    public function hello($name = 'thinkphp')
    {
        $this->assign('name', $name);
        return $this->fetch();
    }
}

請求和響應:
Request請求物件和Response響應物件的基本用法與獲取請求變數,以及進行不同的輸出響應,跳轉,和頁面重定向.
Request物件的作用是與客戶端互動,收集客戶端的Form,Cookies,超連結,或者收集伺服器的環境變數.ThinkPHP5的Request物件由thinkRequest類完成.

資料庫: Db類運算元據庫。
類拆分為Connection(聯結器)/Query(查詢器)/Builder(SQL生成器),查詢語法,閉包查詢和閉包事務,鏈式操作,資料分批處理和資料庫SQL執行監聽.

  • 資料查詢由低到高分三個層次:資料庫原生查詢(SQL查詢),資料庫鏈式查詢(查詢構造器),模型的物件化查詢;
  • ThinkPHP內建抽象資料庫訪問層,把不同的資料庫封裝起來,只需要使用公共的Db類進行操作,而無需針對不同的資料庫寫不同的程式碼和底層實現.
  • 使用資料庫必須配置資料庫連結資訊,有多種方法定義,如配置檔案定義(database.php),方法配置,模型類定義.如果使用多個模組,不同模組採用不同的資料庫連線,每個模組下面單獨定義資料庫配置
  • 配置連結資料庫之後,可以使用資料庫執行原生SQL操作,支援query(查詢操作)和excute(寫入操作)方法並且支援引數繫結.
  • 查詢構造器: 查詢資料,添資料加,更新資料,刪除資料,查詢方法,查詢語法,鏈式操作,聚合查詢,時間查詢,高階查詢,檢視查詢,子查詢,原生查詢.

    查詢資料:

 CREATE TABLE IF NOT EXISTS `think_data`(
    `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(255) NOT NULL COMMENT '名稱',
    `status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '狀態',
     PRIMARY KEY (`id`)
     ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
    INSERT INTO `think_data`(`id`,`name`,`status`) VALUES
    (1,'thinkphp',1),
    (2,'onethink',1),
    (3,'topthink',1);
  • 本地新建資料庫,再新建資料表:

原生查詢,兩個方法query和execute,分別用於查詢操作和寫操作.資料庫查詢構造器,方便執行資料庫操作,構造器基於PDO實現,使用PDO引數繫結,保護應用程式免於SQL隱碼攻擊.

//插入記錄
#result = Db:execute('insert into think_data (id,name,status) values (5,"thinkphp",1)');
dump($result);

//更新記錄
$result = Db::excute('update think_data set name = "framework" where id = 5 ');
dump($result);

//讀取
$result = Db::query('select * form think_data where id = 5');
dump($result);
//query方法返回一個資料集(陣列),如果沒有查詢到資料則返回空陣列.

//刪除delete
$result = Db::excute('delete form think_data where id =5');
dump($result);

// 顯示資料庫列表
$result = Db::query('show tables from demo');
dump($result);
// 清空資料表
$result = Db::execute('TRUNCATE table think_data');
dump($result);
//切換資料庫操作: 略.

查詢語言
ThinkPHP5.0的查詢語法,以及如何使用查詢構建器進行查詢操作,

模型和關聯

ThinkPHP採用ORM的封裝,基本特性就是表對映到模型,記錄對映到模型物件例項,欄位對映到物件屬性.Db類的查詢預設返回的是陣列(或者集合),模型類返回的是當前的模型物件例項(或者集合)

API開發

介面資料統一以JSON格式資料輸出到客戶端.

注意

  • 不要在public目錄之外的任何位置放置資原始檔,包括application目錄,web目錄要放到i
  • 入口檔案可以被隱藏.
  • php think build --module demo 快速新建模組

相關文章