第一步:備份代碼和數據庫
第二步:合併插件和應用代碼
第三步:代碼目錄全部改成小寫(Uploads除外)
第四步:控制器和模型的PHP文件改名
把controller目錄下的文件名人全部由 ***Controller.class.php 改成 ***.php, 如:ActionController.class.php 改成 Action.php。把model目錄下的文件名人全部由 ***Model.class.php 改成 ***.php, 如:ActionModel.class.php 改成 Action.php。可以下載這個工具實現批量自動更改
第五步:把view/default的模板目錄修改成 view/ (相當去掉default這一層目錄)
第六步:手工批量更新以下內容
把這些controller文件裏的命名空間由
namespace Admin\Controller; 全部替換成 namespace app\admin\controller;
把類定義由 class ***Controller extends *** 修改成 class *** extends ***,如:
class ActionController extends 全部替換成 class Action extends
把extends AdminController 修改成 extends Admin
把 use Think\Controller; 修改 use think\Controller;
把這些model文件裏的命名空間由
namespace Admin\Model; 全部替換成 namespace app\admin\model;
把類定義由 class ***Model extends *** 修改成 class *** extends ***,如:
class ActionModel extends 全部替換成 class Action extends
把use Think\Model; 修改成(注意大小定):use think\Model;
直接使用M或者db函數保存數據時save不能再,需要把save替換成update方法,如:
M('attribute')->where(array('name'=>'addon_status'))->save(array('extra'=>$tmpStr));
修改成:
M('attribute')->where(array('name'=>'addon_status'))->update(array('extra'=>$tmpStr));
在模型中,save既表示增加數據也表示更新數據,在TP3.2升級的用戶建議在已有save方法前加入顯性更新操作,如:->save( 替換成 ->isUpdate(true)->save(
對象名不能爲Public,所以 Public.php 需要改名爲 Publics.php
class Public extends 修改爲 class Publics extends
還要把相關的Url的地址由 Public/** 修改爲 Publics/***
最後把Public.php文件刪除
把模板下的public目錄 修改爲 publics,然後把裏面的公共html文件的路徑全部修改爲publics/:
Public/base => publics/base
刪除view下面的public目錄
把所有的 extends \Think\Controller 修改爲 extends \think\Controller
model文件裏的驗證規則不再可用,需要另寫驗證器實現,因此需要刪除這個多餘的代碼,如刪除下面這個:
protected $_validate = array(
array('name', 'require', '標識不能爲空', self::EXISTS_VALIDATE, 'regex', self::MODEL_BOTH),
array('name', '', '標識已經存在', self::VALUE_VALIDATE, 'unique', self::MODEL_BOTH),
array('title', 'require', '名稱不能爲空', self::MUST_VALIDATE , 'regex', self::MODEL_BOTH),
);
把所有IS_POST 替換爲:request()->isPost()
把所有IS_GET 替換爲:request()->isGet()
把所有IS_AJAX 替換爲:request()->isAjax()
把Controller文件裏的 $this->display( 全部修改成 return $this->fetch(
所有 $this->redirect( 函數調用修改成 return $this->redirect(
所有 redirect( 函數調用修改成 return redirect(
把model裏的->getField( 修改 ->value(
把model裏的->getFields( 修改 ->column(
把model裏的->add( 修改 ->save(,如果是用M函數增加的數據,要修改成 ->insert(
在application/common.php 文件里加入單字母函數兼容函數,並且把weiphp裏的application/Common/Common.php裏的函數也複製過來
在config目錄下增加一個define.php文件,專門用於一些兼容性的常量定義
模板標籤的規則由:
// 標籤庫標籤開始標記
'taglib_begin' => '<',
// 標籤庫標籤結束標記
'taglib_end' => '>',
升級TP5的規則爲:
// 標籤庫標籤開始標記
'taglib_begin' => '{',
// 標籤庫標籤結束標記
'taglib_end' => '}',
需要把所有的模板標籤全部替換
把Common/Public 全部替換成 common/Publics
$this->success 和 $this->error 的返回值發生了變化,其中:
status => core
info => msg
這部分內容需要手工一個一個確認修改,無法批量替換(PS:已在TP核心里加了兼容,不需要再修改)
TP5的模板中不再支持include里加block標籤,所以要把所有include裏的block轉換出來
TP5中的模型中的find方法返回的不再是數組,而是對象,因此不能用is_array判斷返回的結果。但這個返回的對象還可以當數組用
is_array肯定是爲false,因此要去掉。但dump($user['nickname']);這樣打印用戶暱稱時還是能正常顯示出來的。也可以在把結果轉換數組如:->find()->toArray();
模型中的join寫法由:
M()->table($px . 'public_follow as f')
->join($px . 'user as u ON f.uid=u.uid')
->where($map)
->count();
修改成:
M()->table($px . 'public_follow')->alias('f')
->join($px . 'user u', 'f.uid=u.uid')
->where($map)
->count();
在application/database.php裏定義一個常量:
define('DB_PREFIX', 'wp_');
然後把所有 C ( 'DB_PREFIX' ) 變量全部修改成: DB_PREFIX
把所以模型裏的 protected $tableName = '***'; 替換成: protected $table = DB_PREFIX.'***';
使用preg_replace時可能會報以下錯誤:
preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
解決方法如:
$msg = preg_replace ( "#\\\u([0-9a-f]+)#ie", "iconv('UCS-2','UTF-8', pack('H4', '\\1'))", $msg );
修改成:
$msg = preg_replace_callback ( "#\\\u([0-9a-f]+)#i", function($r) { return iconv('UCS-2','UTF-8', pack('H4', '\\1'));}, $msg );
方法重寫時,如果父級的方法帶參數,那麼重寫的方法也需要定義一樣的參數才行,:
如果按之前的寫法重寫lists方法:
就會報錯誤:
Declaration of app\topmenu\Controller\TopMenu::lists() should be compatible with app\common\controller\Base::lists($model = NULL, $page = 0)
解決方法就是隻能把父級方法修改修改成不帶參數的:
其它幾個通用方法edit,add,del,config也同樣這樣處理
把Home模塊下的Addons, Base, Public目錄下的模板全部轉移到 common/view/base 目錄下,然後:
把 Base/common 全部替換成: common@base/common
把 Public/header 全部替換成: common@base/header
把 Public/head 全部替換成: common@base/head
把 Public/footer 全部替換成: common@base/footer
把 Public/var 全部替換成: common@base/var
把 Addons/_nav 全部替換成: common@base/_nav
Base/no_side_common => common@base/no_side_common
把全部 _ADDONS 替換成:MODULE_NAME
把全部 _CONTROLLER 替換成:CONTROLLER_NAME
把全部 _ACTION 替換成:ACTION_NAME
把 <php> $add_url || 全部替換成: <php> isset($add_url) ||
把 <php> $del_url || 全部替換成:<php> isset($del_url) ||
把 $search_url || 全部替換成:<php> isset($search_url) ||
把 $post_url || 全部替換成:<php> isset($post_url) ||
把 $get_param[model]=$model['name'] 全部替換成 isset($model['name']) && $get_param[model]=$model['name']
把 $_REQUEST ['_addons'] 全部替換成:MODULE_NAME
把 $_REQUEST ['_controller'] 全部替換成:CONTROLLER_NAME
把 $_REQUEST ['_action'] 全部替換成: ACTION_NAME
把 public/Home下的文件轉移到 public/static/base目錄下,然後把相應的文件目錄全部更改過來:
Public/Home/images => public/static/base/images
SITE_PATH . '/Addons/' => APP_PATH . '/'
$get_param[model] => $get_param['model']
$this->display( => return $this->fetch(
parent::common_edit => return parent::common_edit
parent::common_add => return parent::common_add
parent::common_del => return parent::common_del
parent::common_lists => return parent::common_lists
$field[name] => $field['name']
$field[value] => $field['value']
在TP3.2的模型中,create方法但創建數據對象 但不保存到數據庫;在TP5中,create方法是創建並寫入數據庫,並返回數據實例。因此所有用到create方法的地方都需要修改,如:
if ($Model->create() && $id = $Model->save()) {
修改成:
$data = I('post.');
$id = $Model->isUpdate(false)->save($data);
if ($id) {
User/logout => home/User/logout
User/profile => home/User/profile
'User/login' => 'home/User/login'
把 ->getField( 修改成 ->value( 或者 ->column( 具體要看實際情況而定
mysqldump -u weixinhong -p -d paiqianos > /root/os.sql
在配置文件裏把 var_page 的參數設置爲 p,然後全部替換:
C('VAR_PAGE') => C('paginate.var_page')
把所有用到\Think\Page實現分頁的方法全部改造成paginate
把 selectPage 替換成 paginate,相應的調用代碼需要手工修改,如:
$list = M ( 'article_style')->selectPage(15);
修改成:
$list = M ( 'article_style')->paginate(15);
$list = dealPage($list);
如果使用Model調用,也可以使Model繼承Common裏的Base
I ( 'get. => I ( '
$info[addon] => $info['addon']
$vo[is_admin] => $vo['is_admin']
ONETHINK_ADDON_PATH => APP_PATH
addon_category => app_category
Addons:// =>
/Model => /model
'./Addons/ => APP_PATH.'
T函數已經不存在,需要全部搜索調用 T( 的地方修改掉
把應用下的model文件裏的update方法與核心文件衝突,需要更改成別的名稱:updateInfo 然後把調用這些地方的都統一更新
不能直接使用:->delete ( $id ) 刪除數據,需要修改成:->where('id='.$id)->delete ( )
F函數已經刪除,需要全站替換成S函數
getById方法不存在,需要全部修改成find
get_table_name ( $model ['id'] ) $model ['name']
然後刪除 get_table_name函數
功能組件改造成widget