### 2018 年 11 月 5 日 發布
## 介紹
`5.2`版本的第一個`Beta1`測試版本發布,僅供學習和測試用途,暫時請不要用于實際項目。
>[danger] `5.2`的目標致力于提供一個更簡潔、更標準的核心框架,對于一些非必須功能力求組件化或者通過擴展解決。
目前已經完成的主要特性包括:
* 基于PHP`7.1+`重構;
* 強類型嚴格約束;
* 完全依賴`composer`;
* 原生多應用支持;
* 支持應用的`Composer`引入;
* 引入事件系統;
* 增加`PSR-6`和`PSR-16`支持;
目前核心功能基于PHP`7.1`實現,未來的升級版本不排除要求PHP`7.2+`的可能性。
## 安裝
~~~
composer create-project topthink/think tp5 5.2.*-dev
~~~
啟動服務
~~~
cd tp5
php think run
~~~
然后就可以在瀏覽器中訪問
~~~
http://localhost:8000
~~~
如果需要更新框架使用
~~~
composer update topthink/framework
~~~
## 目錄結構
>[info] 相對于`5.1`來說,`5.2`版本目錄結構的變化不大,主要是默認應用目錄改為`app`,`thinkphp`目錄不再放置根目錄而是直接安裝到`vendor`目錄下。
~~~cmd
www WEB部署目錄(或者子目錄)
├─app 應用目錄
│ ├─command.php 命令行定義文件
│ ├─common.php 公共函數文件
│ ├─event.php 事件定義文件
│ ├─controller 控制器目錄
│ ├─model 模型目錄
│ ├─view 視圖目錄
│ └─ ... 更多類庫目錄
├─config 應用配置目錄
├─route 路由定義目錄
├─public WEB目錄(對外訪問目錄)
│ ├─index.php 入口文件
│ ├─router.php 快速測試文件
│ └─.htaccess 用于apache的重寫
├─extend 擴展類庫目錄
├─runtime 應用的運行時目錄
├─vendor 第三方類庫目錄(Composer依賴庫)
├─composer.json composer 定義文件
├─LICENSE.txt 授權說明文件
├─README.md README 文件
├─think 命令行入口文件
~~~
>[danger] 該目錄結構只是默認生成的(單應用模式),具體會因為你是否采用多應用模式而存在差異。
## 入口文件
由于`5.2`版本完全依賴`Composer`,取消了原本的`think\Loader`類,因此入口文件的寫法有所調整。
系統安裝后提供了一個默認的入口文件(位于`public/index.php`),內容如下:
```
// [ 應用入口文件 ]
namespace think;
require __DIR__ . '/../vendor/autoload.php';
// 執行應用并響應
(new App())->run()->send();
```
如果`app`目錄下面直接是`controller`、`model`以及`view`等類庫目錄,則為單應用模式(默認模式),如果在`app`目錄下創建了應用子目錄,則自動變成多應用模式。
單應用和多應用的目錄結構區別如下(主要在`app`目錄):
單應用
```
├─app 應用目錄
│ ├─controller 控制器目錄
│ ├─model 模型目錄
│ ├─view 視圖目錄
│ └─ ... 更多類庫目錄
├─public WEB目錄(對外訪問目錄)
│ ├─index.php 入口文件
├─config 應用配置目錄
├─route 路由定義目錄
├─runtime 應用的運行時目錄
```
多應用
```
├─app 應用目錄
│ ├─index 主應用
│ │ ├─controller 控制器目錄
│ │ ├─model 模型目錄
│ │ ├─view 視圖目錄
│ │ ├─config 配置目錄(優先)
│ │ └─ ... 更多類庫目錄
│ ├─app2 應用2
│ │ ├─controller 控制器目錄
│ │ ├─model 模型目錄
│ │ ├─view 視圖目錄
│ │ ├─config 配置目錄(優先)
│ │ └─ ... 更多類庫目錄
├─public WEB目錄(對外訪問目錄)
│ ├─index.php 主入口文件
│ ├─app2.php 入口文件2
├─config 應用配置目錄
│ ├─index index應用配置
│ └─app2 app2應用配置
├─route 路由定義目錄
│ ├─index index應用路由定義目錄
│ └─app2 app2應用路由定義目錄
├─runtime 應用的運行時目錄
│ ├─index index應用運行時目錄
│ └─app2 app2應用運行時目錄
```
從目錄結構可以看出來,每個應用相對保持獨立,并且每個應用都有一個對應的入口文件,應用下面還可以通過多級控制器來維護控制器分組。
通過URL重寫可以實現在一個統一的入口文件訪問不同的應用。
新版的`think\App`類的定制性更靈活,你可以在入口文件中對應用進行定制。
```
// [ 應用入口文件 ]
namespace think;
require __DIR__ . '/../vendor/autoload.php';
// 實例化應用
$app = new App();
// 設置當前應用的路徑
$app->path('path/to/name');
// 開發調試模式
$app->debug(true);
// 設置應用名稱
$app->name('name');
// 設置應用的命名空間
$app->setNamespace('app\name');
// 開啟應用類庫后綴
$app->suffix(true);
// 綁定當前應用的請求對象
$app->bind('request', $request);
// 執行應用并輸出響應
$app->run()->send();
```
如果你的某個應用來自于`composer`庫,只需要在入口文件中指定應用的命名空間。
## 命令行
如果采用了多應用模式,命令行可以支持生成不同應用的類文件
```
php think make:controller index@User
php think make:model app2@Blog
```
## Db類和模型
`Db`類也采用了`Facade`機制,所以你在使用`Db`類查詢的時候,應該使用:
```
use think\facade\Db;
...
Db::name('user')->find();
```
模型的用法目前基本上變化不大。
## 事件機制
事件機制用于替代5.1版本的`Hook`和行為,可以通過命令行生成事件類。
```
php think make:event index@User
```
```
namespace app\index\event;
class UserLogin
{
}
```
生成監聽器
```
php think make:listener index@UserLogin
```
```
namespace app\index\listener;
class UserLogin
{
public function handle($event)
{
// 事件監聽處理
}
}
```
給事件綁定別名
```
Event::bind('UserLogin', '\app\index\event\UserLogin');
```
使用監聽器
```
Event::listen('UserLogin', '\app\index\listener\UserLogin');
```
或者手動注冊事件監聽
```
use think\facade\Event;
Event::listen('UserLogin', function(){
});
```
生成事件訂閱類
```
php think make:subscribe index@User
```
```
namespace app\index\subscribe;
class User
{
public function onUserLogin($event)
{
// 事件響應處理
}
}
```
注冊事件訂閱者
```
Event::subscribe('\app\index\subscribe\User');
```
上面的相關操作可以通過在應用目錄的`event.php`文件中直接配置,而無需手動操作。
```
return [
'bind' => [
'UserLogin' => ['\app\index\event\UserLogin'],
// 更多事件別名定義
],
'listen' => [
'UserLogin' => ['\app\index\listener\UserLogin'],
// 更多事件監聽
],
'subscribe' => [
'\app\index\subscribe\User',
// 更多事件訂閱
],
];
```
內置已經綁定別名的事件包括`AppInit`、`AppBegin`、`ActionBegin`、`AppEnd`等,也就是說原來的`Hook`鉤子已經全部改造為事件類。
## 廢棄用法
* 模塊概念(應用下不再有模塊的概念,用多級控制器替代);
* Hook和行為系統(使用事件系統替代);
* 路由的數組返回定義(統一使用方法定義路由);
* Session的前綴機制(已經被簡化);
* Config的`range`機制(已經被簡化);
* 核心`Facade`類的別名(避免混淆而廢棄);
- 值得升級到5.1的18個理由
- 5.1.7版本新特性
- JSON字段類型在ORM中的使用
- 文件下載響應對象
- 教你使用5.1的數組對象查詢
- 模型三大利器之一:搜索器
- 在ThinkPHP中使用Yaconf
- 掌握命令行的表格輸出
- 5.1.25查詢參數綁定的改進
- ThinkPHP安全規范指引
- 巧用數據集的排序功能實現統計排序
- think-orm ——基于5.1的獨立ORM庫
- think-template——基于ThinkPHP的獨立模板引擎
- ThinkPHP5.1.26版本發布——修正版本,包含安全更新
- ThinkPHP5.0和3.2再發安全更新
- 官宣:ThinkPHP發布首個LTS版本
- 你真的了解Db類和模型的正確使用姿勢么?
- 如何更有效的記錄和管理日志
- 模型三大利器之二:修改器
- ThinkPHP5.1.28版本發布——修正上一版本問題,改進關聯查詢
- 模型三大利器之三:獲取器
- API版本控制的幾種思路
- ThinkPHP5.2第一個Beta版本發布測試
- 讓你少犯錯的數據查詢基本原則
- ThinkPHP發布5.1.29版本——常規更新
- 這15個好習慣讓你更容易升級到5.2
- 如何有效提高ThinkPHP的應用性能
- 讓你提高開發效率的查詢技巧
- 模型關聯查詢不完全指南
- 5.2發布Beta2版本——統一和精簡大量用法
- ThinkPHP發布5.1.30版本——支持微秒時間字段寫入
- ThinkPHP的數據緩存使用
- ThinkPHP5.2安裝及入口文件
- ThinkPHP榮獲2018 年度最受歡迎中國開源開發框架第1名
- 5.1路由使用心得技巧
- ThinkPHP5.*版本發布安全更新
- ThinkPHP項目及代碼規范指北
- 5.2版本的設計規范指導
- ThinkPHP5.1.32版本發布——圣誕快樂
- 利用Trait特性給模型增加樂觀鎖功能
- 5.2數據庫和模型的變化(摘要)
- ThinkPHP模板引擎實現和常見問題
- ThinkPHP5.0.24版本發布——安全更新
- 不忘初心,方得始終——ThinkPHP十三周年報告
- ThinkPHP5+相關資源匯總
- 異步社區ThinkPHP周年慶專享優惠活動
- 5.2路由的調整和改進
- ThinkPHP發布5.1.33版本——包含安全更新
- ThinkPHP擴展開發指南
- ThinkPHP發布5.2Beta3版本
- ThinkPHP發布5.1.34版本——喜迎新年
- ThinkPHP發布5.2RC1版本
- ThinkPHP發布5.1.35版本——常規更新
- 5.2配置類的調整
- 5.2時間查詢的改進和優化
- 5.2RC版本升級不完全指導(僅供學習參考)
- ThinkPHP5.2版本正式變更為6.0版本
- ThinkPHP百度云云虛擬主機專享免費活動
- 事件系統以及查詢事件、模型事件的使用
- ThinkPHP6.0RC2版本發布——架構升級、精簡核心
- ThinkPHP5.1.36LTS版本發布——常規更新
- 新版Session和Cookie設計變化
- ThinkPHP5.1.37版本發布——常規更新
- ThinkPHP6.0RC3版本發布——細節完善,體驗優化
- 6.0中間件使用詳解
- Composer各大廠商鏡像地址
- ThinkPHP6.0發布計劃公告
- 「ThinkPHP開發者周刊」招募志愿者
- ThinkPHP6.0日志變化
- ThinkPHP5.1.38版本發布——常規更新
- ThinkPHP6.0RC4版本發布——ORM獨立,日志多通道支持
- ThinkORM2.0開發指南上線
- ThinkPHP6.0RC5版本發布——多應用模式獨立,中間件機制調整
- ThinkPHP6.0版本發布——程序員節福利
- ThinkPHP5.1.39LTS版本發布——常規更新
- ThinkPHP6.0.1版本發布——圣誕快樂!
- 回顧2019,展望2020!
- ThinkPHPV6.0.2版本發布——2020新春快樂!
- 周年福利系列:Swoole合作優惠
- 億速云成為ThinkPHPV6.0獨家贊助發布商??
- 新冠疫情工具和限免資源專題(保持更新中)
- 周年福利系列:創宇信用認證合作優惠
- 周年福利系列:碼云企業版限時10%優惠
- 周年福利系列:想天短說抵現優惠
- think-swoole直播:從零開始掌握swoole開發
- 周年福利系列:B2C開源電商ShopXO授權8折優惠
- 周年福利系列:LayuiAdmin 永久授權限時優惠
- ThinkPHP資源導航站上線——構建生態 服務未來
- ThinkPHP官方技術支持服務和應用服務市場上線公測
- ThinkPHP市場精選——推廣基本要素
- ThinkPHP市場精選——客服聊天專題
- ThinkPHPV6.0.3版本發布——端午安康
- ThinkPHP開發者扶持計劃
- 6.0.3版本關鍵更新及升級事項
- 「ThinkPHP開發者周刊」改版重啟
- ThinkPHP市場精選——企業建站專題
- ThinkPHP 提供統一API接口服務
- ThinkPHP市場精選——直播電商專題
- ThinkAPI服務SDK發布
- 官方服務市場啟用獨立子域名
- ThinkPHP市場精選——刷臉支付專題
- ThinkAPI推出會員服務計劃
- ThinkPHPV6.0.4版本發布——中秋國慶雙節快樂
- ThinkPHPV5.1.40版本發布——常規更新
- 1024程序員節福利走一波
- ThinkPHP V6.0.5版本發布——兼容Composer2.0
- 知識圖譜應用場景——源論技術沙龍
- ThinkPHP5.*版本改進Composer2.0的兼容
- 官方市場雙十一精選推薦
- 技術人做產品有機會么(文末送課程)
- 本周秒殺——古德云售后獲客營銷系統
- ThinkAPI服務更新——支持接口分組和PHP版本依賴調整
- PHP8新特性盤點
- PHP8新特性系列:構造器屬性提升使用及注意事項
- ThinkPHP2021新年寄語
- ThinkPHP V6.0.6&V5.1.41版本發布——兼容PHP8.0
- PHP如何更優雅地調用API接口
- ThinkPHP V6.0.7發布——修正版本
- ThinkAPI服務更新——IP白名單
- 最新版ThinkORM對于時間字段的調整
- ThinkAPI短信接口正式上線
- ThinkPHP V6.0.8版本發布——多環境變量配置支持
- 頂想云寫作服務開啟第一次公測
- ThinkSSL上線——官方SSL/TLS證書服務
- MDBootstrap國內用戶福利——ThinkPHP官方市場首發
- ThinkPHP V6.0.9版本發布——常規更新
- ThinkORM功能盤點——虛擬模型
- 全面支持主流GIT版本庫——云寫作服務第二次公測
- 云寫作服務私有化部署方案之:版本庫私有化
- 看云雙十一活動
- ThinkPHP V6.0.10LTS發布——兼容PHP8.1
- ThinkPHP V6.0.12發布——命令行兼容8.1
- 頂想云知識管理上線公測——構建企業文檔中心和知識庫
- 頂想云上線——助力生態數字化建設
- 618活動進行中——官方市場迎來一波更新
- 頂想云知識管理正式上線——看云文檔啟動遷移服務
- ThinkPHP V6.0.13發布——常規更新
- 頂想云網站助理服務上線——構建產品支持服務
- ThinkPHP發布6.1.0&6.0.14版本——安全更新
- ThinkPHP新版社區上線試運營
- ThinkAPI上架人臉核身接口——助力網站實名認證
- 辭舊迎新——舊版社區停止注冊及發帖
- ThinkPHP6.1.2版本發布——兼容PHP8.2