ThinkPHP 3.2 的變化

炎藤發表於2015-03-02

ThinkPHP 3.2 基於 ThinkPHP 3.1 的基礎上有許多的變化,我覺得這個版本應該設立為 ThinkPHP 4.0 而不是什麼 3.2。如果你在使用 ThinkPHP 3.1 請勿貿然遷移升級,這可不是簡單的覆蓋下檔案就安然無恙的事情。這裡就列出了下面幾條 ThinkPHP 3.2 改變的地方以及遷移中的注意事項:

1. PHP 的版本

ThinkPHP 3.2 要求 PHP 5.3 以上的版本,而 ThinkPHP 3.1 只需要 PHP 5.2 就好了

2. 程式資料夾的修改

ThinkPHP 3.2 使用 Application 作為程式資料夾,而 ThinkPHP 3.1 則是用 app 作為程式資料夾。

3. 不同分組設定的升級

建議以後開發儘量不要做分組,要不然針對分組,有不少要處理的地方,這裡只是介紹未分組的情況,有做分組的朋友,請上官方文件尋找答案。

ThinkPHP 3.2 設定了一個 Home 目錄,很多檔案都將遷移到 Home 目錄中。

App/Common/common.php     =>  Application/Home/Common/function.php  
App/Common/extend.php     =>  Application/Home/Common/extend.php(假設存在定義的話)  
App/Conf/Config.php       =>  Application/Home/Conf/config.php  
App/Lang/zh-cn/common.php =>  Application/Home/Lang/zh-cn.php(假設存在的話)  

App/Lib/Action     =>    Application/Home/Action  
App/Lib/Model      =>    Application/Home/Model  

App/Tpl            =>    Application/Home/View  

注意,因為 Home 目錄的出現,你需要修改你的 .htaccess 檔案為

<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>

否則,將會出現模組找不到的錯誤

新的目錄對 Action 和 Tpl 進行了重新命名,分別為 Controller 和 View,這樣更加直觀的體現了 MVC 的資料夾的部署方式。對於那些保留了 Action 的朋友,可以修改 Application/Common/config.php 中的資訊:

'DEFAULT_C_LAYER'       =>  'Action', // 預設的控制器層名稱
'MODULE_ALLOW_LIST'     =>  array('Home','Admin',...), // 配置你原來的分組列表
'DEFAULT_MODULE'        =>  'Home', // 配置你原來的預設分組

4. 系統配置引數的變動

ThinkPHP 3.2 廢棄了以下系統配置引數

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

5. 名稱空間

ThinkPHP 3.2 新增了名稱空間,把專案的Application/Home/Action目錄下面的所有檔案,頭部新增如下程式碼(必須是除註釋以外的第一行):

namespace Home\Action;
use Think\Action;

如果你的專案使用了控制器分層的話,需要對每個分層的類庫檔案新增類似的程式碼,例如有定義Event分層的話,需要在頭部新增:

namespace Home\Event;
use Think\Action;

把專案的Application/Home/Model目錄下面的所有檔案,頭部新增如下程式碼(必須是除註釋以為的第一行):

namespace Home\Model;
use Think\Model;

如果你的專案使用了模型分層的話,需要對每個分層的類庫檔案新增類似的程式碼,例如如果你有Service分層,需要在頭部新增:

namespace Home\Service;
use Think\Model;

6. 方法調整

控制器類Think\Controller或者Think\Action的下列方法已經廢除:

廢除方法替代方法
_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')

7. 常量調整

下列常量已經廢除:

APP_NAME    // 3.2版本中無需再定義該常量  
__GROUP__   // 3.2版本中可以用 __MODULE__ 表示模組的URL地址  
GROUP_NAME  // 3.2版本中可以用 MODULE_NAME 獲取當前模組名  
MODE_NAME   // 3.2版本中模式擴充套件已經廢棄,參考下面的模式調整部分  

這樣就基本上完成了遷移,如果中間還有一些修改的話,請上官方文件尋找答案。

相關文章