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 )|
复制代码
举个例子,如果应用类库开头`use`了 `think\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.php`、`cache.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`方法以及`import`和`vendor`助手函数,推荐全面采用命名空间方式的类以及自动加载机制,如果必须使用请直接改为php内置的`include`或者`require`语法。
为了保持`Loader`类库的单纯性,原`Loader`类的`controller`、`model`、`action`和`validate`方法改为`App`类的同名方法。
路由类库进行了重构和拆分,在使用上更加对象化,同时为了简化方法调用,原来的`before_behavior`和`after_behavior`参数更改为`before`和`after`,并且路由缓存功能暂时取消。
`url_route_on`配置参数无效,会始终检查路由,没有定义路由的情况下默认解析方式依然有效