thinkphp从3.1升级到3.2

作者: 好奇的菜鸟 | 来源:发表于2016-12-23 21:41 被阅读131次

    本章旨在帮助使用3.1版本的用户更方便的升级到3.2版本,给出了升级步骤和建议。

    升级须知

    如果从3.1版本升级到3.2版本,需要注意如下的升级须知并按照升级指导的操作步骤进行。

    3.2版本要求PHP5.3.0以上,如果环境低于该版本,将无法升级;

    本升级指导用于指导开发人员从3.1版本升级到3.2版本;

    如果你的项目对框架核心进行过较大的改动的话不建议升级;

    本指导手册不确保你的项目顺利升级,不对因升级带来的任何后果负责;

    升级项目之前请做好各项备份工作。

    准备工作

    从官网或者github下载最新版本的ThinkPHP3.2;

    把下载的ThinkPHP3.2解压缩,得到Application、Public和ThinkPHP目录,以及一个入口文件index.php;

    备份你的项目文件(包括ThinkPHP核心目录)到安全的位置;

    删除项目的Runtime目录;

    把原来的ThinkPHP系统目录更名为ThinkPHP_old;

    把原来的index.php入口文件更名为index_old.php;

    如果原来的项目目录为Application更名为App;

    把解压后的Application、ThinkPHP目录,以及index.php放入你的网站目录;

    运行新的入口文件index.php,如果显示

    则准备工作已经完成,下面开始进行应用目录的调整工作。

    应用目录调整

    应用目录的调整分三种不同的情况:未分组/普通分组/独立分组,请根据自己的情况选择目录调整的方式。

    1、未分组

    如果你的项目未进行任何分组,请按照如下的方式调整目录结构:

    删除Application/Common目录,在你的原有项目目录(假设为App)下面的Common、Conf和Lang目录移动到Application/Home目录下面,并把其中的Common/common.php文件改名为function.php,移动前后的位置类似于:

    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(假设存在的话)

    把项目目录下面的Lib目录下面的所有子目录移动到Application/Home目录下面,类似于:

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

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

    把项目目录下面的Tpl目录移动到Application/Home目录下面,并更名为View,类似于:

    App/Tpl=>Application/Home/View

    调整后的目录结构类似于:

    Application

    ├─Home

    │├─Conf配置文件目录

    │├─Common公共函数目录

    │├─Action控制器目录

    │├─Model模型目录

    │└─View模版文件目录

    2、普通分组

    如果你的项目采用了普通分组,则按照下面的方式进行目录调整(以Home分组为例,其他分组参考调整):

    项目公共函数目录下面的目录和文件作如下调整,类似于:

    App/Common/common.php=>Application/Common/Common/function.php

    App/Common/Home/function.php=>Application/Home/Common/function.php

    项目目录下面的Conf目录如如下调整,类似于:

    App/Conf/Config.php=>Application/Common/Conf/config.php

    App/Conf/Home/config.php=>Application/Home/Conf/config.php

    如果采用了语言包功能,目录如如下调整:

    App/Lang/zh-cn/common.php=>Application/Common/Lang/zh-cn.php

    App/Lang/zh-cn/Home/lang.php=>Application/Home/Lang/zh-cn.php

    控制器目录调整如下,类似于:

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

    App/Lib/Action/Admin=>Application/Admin/Action

    模型目录调整如下,类似于:

    App/Lib/Model=>Application/Common/Model

    App/Lib/Model/Home=>Application/Home/Model(如果有定义)

    模版目录调整如下,类似于:

    App/Tpl/Home=>Application/Home/View

    调整后的目录结构如下:

    Application

    ├─Common应用公共模块

    │├─Common应用公共函数目录

    │└─Conf应用公共配置文件目录

    ├─HomeHome模块

    │├─Action模块控制器目录

    │├─Common模块函数公共目录

    │├─Conf模块配置文件目录

    │├─Lang模块语言包目录

    │├─Model模块模型目录

    │└─View模块视图文件目录

    其他分组参考Home分组进行调整即可。

    3、独立分组

    如果采用的是独立分组,公共函数目录作如下调整,类似于:

    App/Common/common.php=>Application/Common/Common/function.php

    把项目目录下面的Conf、Lang移动到Application/Common目录下面,类似于:

    App/Conf/Config.php=>Application/Common/Conf/config.php

    App/Lang/zh-cn/common.php=>Application/Common/Lang/zh-cn.php

    把独立分组目录(假设你的独立分组目录为App/Modules)下面的子目录都移动到原来的项目目录下面,类似于:

    App/Modules/Home=>Application/Home

    并且把Home目录下面的Tpl目录更改为View。

    调整后的目录结构如下:

    Application

    ├─Common应用公共模块

    │├─Common应用公共函数目录

    │└─Conf应用公共配置文件目录

    ├─HomeHome模块

    │├─Action模块控制器目录

    │├─Common模块函数公共目录

    │├─Conf模块配置文件目录

    │├─Lang模块语言包目录

    │├─Model模块模型目录

    │└─View模块视图文件目录

    其他分组参考Home分组进行调整即可。

    配置调整

    编辑Application/Common/config.php(没有则创建一个新的文件),添加下面的配置参数:

    'DEFAULT_C_LAYER'=>'Action',// 默认的控制器层名称

    'MODULE_ALLOW_LIST'=>array('Home','Admin',...),// 配置你原来的分组列表

    'DEFAULT_MODULE'=>'Home',// 配置你原来的默认分组

    未分组的情况下,再添加如下配置参数:

    'MULTI_MODULE'=>false,// 单模块访问

    'DEFAULT_MODULE'=>'Home',// 默认访问模块

    数据库连接配置参数DB_HOST如果原来配置的是localhost或者域名,请修改为ip地址,否则会导致数据库连接缓慢(这是PHP5.3的机制问题 非TP问题),例如之前如果是配置的:

    'DB_HOST'=>'localhost'

    建议改为:

    'DB_HOST'=>'127.0.0.1'

    原来的配置参数中废弃的参数包括(增补中):

    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

    别名定义调整

    如果你在项目中定义了自己的别名定义文件,需要在别名定义中使用命名空间,例如:

    'Think\Page'=>CORE_PATH.'Page'.EXT,

    'Think\Auth'=>CORE_PATH.'Auth'.EXT,

    行为定义调整

    如果在项目中自定义了行为定义文件,那么需要修改行为定义为命名空间方式,例如:

    'app_begin'=>array('Behavior\Cron','Behavior\BrowserCheck'),

    路由定义调整

    如果你的项目使用了路由功能,请参考下面的建议进行调整。

    3.2版本的路由定义是针对模块的,所以路由定义需要放到模块配置文件中,把Application/Common/config.php中的路由定义相关的配置参数URL_ROUTER_ON和URL_ROUTE_RULES移动到相关模块的配置文件中并作适当的调整。

    新版中路由定义规则中不需要添加模块名,如果要在URL中隐藏模块名请参考模块部署章节内容。

    命名空间调整

    把项目的Application/Home/Action目录下面的所有文件,头部添加如下代码(必须是除注释以外的第一行):

    namespaceHome\Action;

    useThink\Action;

    如果你的项目使用了控制器分层的话,需要对每个分层的类库文件添加类似的代码,例如有定义Event分层的话,需要在头部添加:

    namespaceHome\Event;

    useThink\Action;

    把项目的Application/Home/Model目录下面的所有文件,头部添加如下代码(必须是除注释以为的第一行):

    namespaceHome\Model;

    useThink\Model;

    如果你的项目使用了模型分层的话,需要对每个分层的类库文件添加类似的代码,例如如果你有Service分层,需要在头部添加:

    namespaceHome\Service;

    useThink\Model;

    对类库中的代码实现中实例化对象(包括系统内置类和自定义类)的部分调整为命名空间调用的方式,例如:

    newPage(...)=>new\Think\Page(...)

    newPdo(...)=>new\Pdo(...)

    newUserModel(...)=>new\Home\Model\UserModel(...)

    用ThinkPHP内置的A/D/M方法实例化的对象代码无需调整。

    如果你升级的版本是3.2.1版本,应用类库的命名空间可以无需定义,但调用系统核心类库的时候仍然需要使用命名空间的方式。

    在3.2.1版本中,可以在应用配置文件中设置:

    'APP_USE_NAMESPACE'=>false,// 关闭应用的命名空间定义

    'APP_AUTOLOAD_LAYER'=>'Action,Model',// 模块自动加载的类库后缀

    设置后,应用类库无需再使用命名空间定义,只需要改成:

    classUserActionextendsThink\Action{

    }

    classUserModelextendsThink\Model{

    }

    模型调整

    如果在模型类的自动验证或者自动完成定义中使用了下面的常量,需要进行调整:

    原来方式新版方式

    MODEL_INSERTself::MODEL_INSERT

    MODEL_UPDATEself::MODEL_UPDATE

    MODEL_BOTHself::MODEL_BOTH

    MUST_VALIDATEself::MUST_VALIDATE

    EXISTS_VALIDATEself::EXISTS_VALIDATE

    VALUE_VALIDATEself::VALUE_VALIDATE

    函数调整

    原来的halt函数和_404函数已经废除,ThrowException也不建议使用,统一使用E函数替代。

    如果你之前的项目定义了common.php函数文件,需要并入Common\function.php函数文件中。

    方法调整

    控制器类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')

    _server('id')I('server.id')

    _globals('id')I('globals.id')

    常量调整

    下列常量已经废除:

    APP_NAME// 3.2版本中无需再定义该常量

    // 3.2版本中可以用__MODULE__ 表示模块的URL地址

    GROUP_NAME// 3.2版本中可以用 MODULE_NAME 获取当前模块名

    MODE_NAME// 3.2版本中模式扩展已经废弃,参考下面的模式调整部分

    模式调整

    如果你使用了ThinkPHP的模式扩展,那么抱歉地通知您,原来的模式扩展已经废弃,命令行模式不需要单独开发,新版框架可以直接切换到命令行模式访问。如果使用了PHPRPC或者REST模式的话,请参考专题中的RPCRESTFul部分修改。如果你使用了SAE引擎扩展的话,新版在标注模式下面可以直接部署到SAE环境,无需更改。参考SAE部分说明。

    下面的模式暂时不提供支持:

    Lite

    Thin

    Amf

    自定义驱动调整

    如果你在项目中自定义了相关驱动,包括数据库、标签库等,那么请参考驱动扩展部分进行调整。

    模板调整

    默认的模板替换行为只支持下列替换规则:

    ''=>,// 当前网站地址

    ''=>,// 当前应用地址

    '__MODULE__'=>__MODULE__,

    '/index/article'=>/index/article,// 当前操作地址

    '/subject/arflvttx.html'=>/subject/arflvttx.html,// 当前页面地址

    '__CONTROLLER__'=>__CONTROLLER__,

    '/index'=>__CONTROLLER__,

    '/Public'=>.'/Public',// 站点公共目录

    对于废除的替换规则你可以在模块的配置文件中自行添加,例如:

    'TMPL_PARSE_STRING'=>array(

    '/ishuowww/Tpl/Public'=>MODULE_PATH.'View/Public/',

    '/ishuowww/Tpl/'=>MODULE_PATH.'View/default/'

    )

    入口文件调整

    如果你的原来项目的入口文件中(之前备份的index_old.php)还有其他代码,请调整合并到新的入口文件中,然后建议你开启调试模式后运行新的入口文件,如果仍然有错误发生,请根据错误提示进行下一步的调整或者到官网讨论区给我们反馈。

    升级成功后记得删除ThinkPHP_old和原来的项目目录。

    希望您的项目能够升级顺利!

    来自:http://document.thinkphp.cn/manual_3_2/upgrade_guide.html

    相关文章

      网友评论

        本文标题:thinkphp从3.1升级到3.2

        本文链接:https://www.haomeiwen.com/subject/arflvttx.html