ThinkPHPV5.1 升级后需要注意事项

ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特性包括:

  • 引入容器和Facade支持
  • 依赖注入完善
  • 对象化的路由
  • 配置和路由目录独立
  • 取消系统常量
  • 助手函数增强
  • 类库别名机制
  • 模型和数据库增强
  • 支持PSR-3日志规范

废除的功能:

  • 聚合模型
  • 内置控制器扩展类

ThinkPHP5的运行环境要求PHP5.6以上。
目录结构

初始的目录结构如下:

www WEB部署目录(或者子目录)
├─application 应用目录
│ ├─common 公共模块目录(可以更改)
│ ├─module_name 模块目录
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ … 更多类库目录
│ │
│ ├─command.php 命令行定义文件
│ ├─common.php 公共函数文件
│ └─tags.php 应用行为扩展定义文件

├─config 应用配置目录
│ ├─module_name 模块配置目录
│ │ ├─database.php 数据库配置
│ │ ├─cache 缓存配置
│ │ └─ …
│ │
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─log.php 日志配置
│ ├─session.php Session配置
│ ├─template.php 模板引擎配置
│ └─trace.php Trace配置

├─route 路由定义目录
│ ├─route.php 路由定义
│ └─… 更多

├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写

├─thinkphp 框架系统目录
│ ├─lang 语言文件目录
│ ├─library 框架类库目录
│ │ ├─think Think类库包目录
│ │ └─traits 系统Trait目录
│ │
│ ├─tpl 系统模板目录
│ ├─base.php 基础定义文件
│ ├─console.php 控制台入口文件
│ ├─convention.php 框架惯例配置文件
│ ├─helper.php 助手函数文件
│ ├─phpunit.xml phpunit配置文件
│ └─start.php 框架入口文件

├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor 第三方类库目录(Composer依赖库)
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件

目录结构的主要变化是配置目录和路由定义目录独立出来,不再放入应用类库目录。
升级指导
1、命名空间调整

如果你自定义了应用类库的命名空间,需要改为设置环境变量app_namespace而不是应用配置文件。

如果你的应用类库中使用了下面的系统类库(主要涉及的类库是5.0静态调用的系统类库),那么命名空间需要调整如下:

|5.0系统|5.1系统|
|—|—|
| think\App     | think\facade\App (或者 App )|
| think\Cache    | think\facade\Cache (或者 Cache )|
| think\Config   | think\facade\Config (或者 Config )|
| think\Cookie   | think\facade\Cookie (或者 Cookie )|
| think\Debug   | think\facade\Debug (或者 Debug )|
| think\Env   | think\facade\Env (或者 Env )|
| think\Hook     | think\facade\Hook (或者 Hook )|
| think\Lang     | think\facade\Lang (或者 Lang )|
| think\Log      | think\facade\Log (或者 Log )|
| think\Request  | think\facade\Request (或者 Request )|
| think\Response | think\facade\Reponse (或者 Reponse )|
| think\Route    | think\facade\Route (或者 Route )|
| think\Session  | think\facade\Session (或者 Session )|
| think\Url      | think\facade\Url (或者 Url )|
| think\View     | think\facade\View (或者 View )|

举个例子,如果应用类库开头usethink\Url

use think\Url;
Url::build(‘index/index’);

则需要改成

use think\facade\Url;
Url::build(‘index/index’);

或者

use Url;
Url::build(‘index/index’);

5.1为系统的类库注册了类库别名,因此可以直接从根命名空间方式调用Url。

所以路由配置文件中你可以直接删除下面的一行代码

use think\Route;

2、配置文件调整

5.1的配置文件全部采用二级配置方式,所有的不带一级配置名的参数都会作为app的二级配置,例如

config(‘app_debug’);

等同于

config(‘app.app_debug’);

一级配置app下的配置参数都在app.php配置文件中定义。

如果要获取一级配置下面的所有参数,使用

\think\facade\Config::pull(‘app’);

原有的配置文件config.php按照模块拆分为app.phpcache.php 等独立配置文件放入config目录,系统默认的配置文件清单如下:

|配置文件|说明|
|—|—|
|app.php| 应用配置文件|
|cache.php|缓存配置文件|
|cookie.php|Cookie配置文件|
|database.php|数据库配置文件|
|log.php|日志配置文件|
|session.php|Session配置文件|
|template.php|模板引擎配置文件|
|trace.php|页面Trace配置文件|

原来的应用extra目录下面的配置文件直接移动到config目录下面。
原来模块的配置目录直接移动到config目录下面后,然后参考上面的应用配置文件进行调整。

原有的路由定义文件route.php 移动到route目录下面,如果有定义其它的路由配置文件,一样直接放入route目录即可。
3、模型调整

为了确保模型的用法统一,对模型进行了一些调整,包括:
* 模型的数据集查询始终返回数据集对象而不再是数组;
* 模型的数据表主键如果不是id,则必须设置模型的pk属性;
* 软删除trait引入更改为 use think\model\concern\SoftDelete
* 聚合模型功能废除,使用关联模型配合关联自动写入功能替代,更灵活;
4、常量调整

5.1取消了所有的框架内置常量,如需获取,请使用App类的内置方法获取,例如:

|5.0常量|5.1获取方法|
|—|—|
|EXT| 取消,固定使用 `.php`|
|IS_WIN|取消|
|IS_CLI|取消|
|ENV_PREFIX|取消,固定使用`PHP_`|
|THINK_START_TIME|App::getBeginTime()|
|THINK_START_MEM|App::getBeginMem()|
|THINK_VERSION| App::version()|
|THINK_PATH|App::getThinkPath()|
|LIB_PATH|App::getThinkPath() . ‘library/’|
|CORE_PATH|App::getThinkPath() . ‘library/think/’|
|APP_PATH|App::getAppPath()|
|CONFIG_PATH| App::getConfigPath()|
|CONFIG_EXT|App::getConfigExt()|
|ROOT_PATH|App::getRootPath()|
|EXTEND_PATH| App::getRootPath() . ‘extend/’ |
|VENDOR_PATH| App::getRootPath() . ‘vendor/’ |
|RUNTIME_PATH|App::getRuntimePath()|
|LOG_PATH| App::getRuntimePath() . ‘log/’ |
|CACHE_PATH| App::getRuntimePath() . ‘cache/’ |
|TEMP_PATH| App::getRuntimePath() . ‘temp/’ |
|MODULE_PATH|App::getModulePath()|

另外也可以通过Env类的get方法获取这些路径变量(不区分大小写),例如:

Env::get(‘root_path’);

5、其它注意事项

extra_file_list 配置参数无效,请自己在common.php文件中引入。

5.1版本取消Loader::import方法以及importvendor助手函数,推荐全面采用命名空间方式的类以及自动加载机制,如果必须使用请直接改为php内置的include或者require语法。

为了保持Loader类库的单纯性,原Loader类的controllermodelactionvalidate方法改为App类的同名方法。

路由类库进行了重构和拆分,在使用上更加对象化,同时为了简化方法调用,原来的before_behaviorafter_behavior参数更改为beforeafter,并且路由缓存功能暂时取消。

url_route_on配置参数无效,会始终检查路由,没有定义路由的情况下默认解析方式依然有效。

你可能感兴趣的:(技术分享)