簡介
免費開源,物件導向的輕量級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 快速新建模組