# 从炸毛框架 V1 升级

> 这里只写明可能在升级过程中会影响原先代码执行的部分，不包含新增的特性等。

### 需要改变命名空间的类

- `Framework\Console` -> `ZM\Console\Console`
- `Swlib\Util\SingletonTrait` -> `ZM\Utils\SingletonTrait`
- `ZM\Annotation\Http\Before` -> `ZM\Annotation\Http\HandleBefore`
- `ZM\Annotation\Http\After` -> `ZM\Annotation\Http\HandleAfter`
- `@SwooleEventAt` -> `@OnSwooleEvent`
- 删除 `@SwooleEventAfter`
- 删除 `ModBase`
- `@HandleEvent` -> `@SwooleHandler`
- `ZM\Utils\ZMRobot` -> `\ZM\API\ZMRobot`

### 方法名称变更

- `ZM\Console::stackTrace()` -> `ZM\Console::trace()`

### 注解的变化

`@OnSwooleEvent`（原 `@SwooleEventAt`）中，`rule` 参数不再是自定义语法的东西了（比如之前的 `connectType:qq` 之类的鸡肋语法），直接是可执行的 PHP 代码，比如 `3 == 4`，`connectIsQQ()` 之类的。

去除 `@CQAPISend`，因为目前没什么意义。

`@CQCommand` 中，`regexMatch` 变成 `pattern`，`fullMatch` 变成 `regex`，消除歧义（第一个是 * 号匹配符进行匹配的，第二个是标准的正则表达式匹配）。同时新增 `start_with`，`end_with`，`keyword` 平行选项。

`@OnTick` 注解新增第二个参数 `worker_id`，其中默认是 0，代表只在 `#0` 号工作进程上运行计时器。

### 中间件编写的改变

原先的 Middleware 是需要含有 `getName()` 方法才合法，现在不需要了，但是对 `@MiddlewareClass` 注解需要增加参数，也就是说原先 `getName()` 返回的名称现在需要写到 `@MiddlewareClass("xxx")` 这样的形式。

### ZMBuf 的变化

由于 2.0 框架使用了多进程模型，所以不能使用原先适用于单进程下全局变量的方式（ZMBuf）进行存取变量，所以 ZMBuf 下的所有方法都需要更改，其中 `get, set` 等对缓存操作的模型请根据 2.0 的文档变更使用 `Redis` 或内置的多进程共享内存可用的 `LightCache` 轻量缓存。

而获取全局配置文件，如 `global.php` 文件，也发生了变化，新框架引入了 `ZMConfig` 对象，可以快速地区分各类环境变量从而读取不同的配置文件。比如我们获取原先的 global 配置文件中的一项：`ZMBuf::globals("port")`，在 2.0 中需要使用 `ZMConfig::get("global", "port")` 方式。以此类推，`ZMBuf::config("xxx")` 也直接变为 `ZMConfig::get("xxx")` 了。
