ThinkPHP 3.2 發布已有一段時間,這個版本在 3.1 基礎上進行了架構級的重構,變化之大幾乎可視為 ThinkPHP 4.0。若您正使用 3.1 版本,切勿嘗試直接覆蓋文件升級,否則極易導致系統崩潰。本文將系統梳理 3.2 版本的核心變更,助您平滑遷移。
ThinkPHP 3.2 強制要求 PHP 5.3 或以上版本,而 3.1 僅需 PHP 5.2。這意味著您可以充分利用 PHP 5.3 的新特性(如命名空間、晚期靜態綁定等),但也需確認服務器環境滿足要求。
最直觀的變化是程序入口目錄從 app 改為 Application,並引入模組化設計。以無分組項目為例,原有文件遷移規則如下:
App/Common/common.php → Application/Home/Common/function.phpApp/Common/extend.php → Application/Home/Common/extend.phpApp/Conf/Config.php → Application/Home/Conf/config.phpApp/Lang/zh-cn/common.php → Application/Home/Lang/zh-cn.phpApp/Lib/Action → Application/Home/ControllerApp/Lib/Model → Application/Home/ModelApp/Tpl → Application/Home/View注意:Action 與 Tpl 分別更名為 Controller 和 View,更符合 MVC 規範。若需保留 Action 命名,可在 Application/Common/config.php 中配置:
'DEFAULT_C_LAYER' => 'Action',
'MODULE_ALLOW_LIST' => array('Home','Admin',...),
'DEFAULT_MODULE' => 'Home'
因 Home 模組的引入,URL 重寫規則需調整為:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/home/$1 [QSA,PT,L]
</IfModule>
否則將拋出「模組找不到」錯誤。
廢棄參數: APP_GROUP_LIST、APP_GROUP_MODE、APP_AUTOLOAD_PATH、APP_TAGS_ON、APP_GROUP_PATH、DEFAULT_APP、DEFAULT_GROUP、VAR_GROUP、LOG_DEST、LOG_EXTRA。
重命名參數: DEFAULT_MODULE → DEFAULT_CONTROLLER。
3.2 全面採用 PHP 命名空間。所有控制器文件須在首行(註釋除外)聲明:
namespace Home\Controller;
use Think\Controller;
模型文件同理:
namespace Home\Model;
use Think\Model;
若使用控制器/模型分層,需為每層添加對應命名空間(如 Home\Event、Home\Service)。
| 廢棄方法 | 替代方案 |
|---|---|
_get('id') | I('get.id') |
_post('id') | I('post.id') |
_put('id') | I('put.id') |
_param('id') | I('id') |
_request('id') | I('request.id') |
_cookie('id') | I('cookie.id') |
APP_NAME:3.2 無需定義__GROUP__ → __MODULE__(模組 URL 地址)GROUP_NAME → MODULE_NAME(當前模組名)MODE_NAME:模式擴展已廢棄完成上述調整後,基本可實現平滑遷移。如遇邊緣問題,請參考官方文檔深入排查。