v1.2.7 变更
修复上一版本默认不加载任何扩展的严重 bug

完善自动文档脚本

Controller 可以用 G 函数了。 第三方库提供者的控制器可以让人热修改了。
相应的是 'controller_use_singletonex' 选项 和 replaceControllerSingelton($old_class, $new_class)

debug_log($str,$arg=[]) 不要考虑 App::Logger()->info,debug 还是什么。

添加了手动关闭数据库的 DbCloseAll();

默认不再和额外命名空间 LazyToChange 有任何联系

设置文件的手动选项， 'use_setting_file'  'use_env_file'  不再默认必须有设置文件了。

Kernel 方面，override_class 选项不再和 namespace 相关。path ， namespace 这两项默认不需要提供了。

Kernel 增加了 onAfterRun 事件处理。


Route 析出内部 trait Route_UrlManager 处理 url ， skip_fix_path_info 现在是由 Route 类处理


Db 丰富了 Object 方式的查询 。setObjectResultClass （链式） ,fetchObject ,fetchObjectAll

RouteHookPathInfoByGet 改名 RouteHookPathInfoCompat
RouteHookApiServer 完善可用

JsonRpcClientBase 修复了代理的 init(),isInit() 函数
AppPluginTrait 修复 OnUrl，希望没出其他额外事
ComponentBase 多了 getComponenetNamespace


示例文件更精简。
其他一些可虎烈的小改动。

v1.2.6 变更
1 支持 windows
2 架构更新， 原先的 Service 重命名为 Business 导致模板目录变更
3 更新测试套件
4 规范函数名字里的缩写词，统一用大写开头全小写形式， 如 URL => Url
5 有了部分自动文档脚本。
6 添加了事件系统。

代码变更
DuckPhp\Core\App
    core_options
        有了自己的核心配置（但你不必动用他们
    XCall
        添加 XCall
    ThrowOn
        ThrowOn 方法重写
    Cache
        添加了 Cache 类
    Db, Event
        DB_R ,DB_W 改为 DbForRead,
    Event
        添加了事件系统
    Show()
        调整
    Route()
        添加了获取 Route 类的代理方法
    SG() => SuperGlobal()
        引发了其他类一些变化
    GET(),POST()
        从 Helper实现变成 App实现。
DuckPhp\Core\AutoLoader

    支持windows
DuckPhp\Core\ComponentBase

    内嵌 SingletonEx 实现
    支持windows
DuckPhp\Core\Kernel

    默认命名空间改为 LazyToChange
    onInit() 等有同名属性接挂
DuckPhp\Core\Route
    'controller_class_postfix' => '',
    'controller_enable_slash' => false,
    'controller_path_ext' => '',
DuckPhp\Core\ThrowOn

    已经删除
DuckPhp\Core\View

    尝试严格化
    添加 getViewData
DuckPhp\DuckPhp

    不再调用扩展类的方法
DuckPhp\Ext\Cache

    新的空 cache 类
DuckPhp\Ext\DbManager

    重写以化简 DbManager 类，现在是和 DuckPhp\Db\Db 强相关的类。
    要替换默认 Db 类，请重写 Db 方法。

DuckPhp\Ext\EventManager

    新增事件系统
DuckPhp\Ext\PulginForSwooleHttpd

    已移除，未来在其他附属工程里添加
DuckPhp\Ext\RedisCache

    从 RedisSimpleCache 重写
DuckPhp\Ext\RedisManager

    调整选项
DuckPhp\Ext\RouteHookApiServer

    新增API服务器路由钩子。（不够成熟，但可用）
DuckPhp\Ext\RouteHookPathInfoByGet

    重命名自 RouteHookOneFileMode 并且默认内置
    
DuckPhp\Ext\StritCheck

    重写并不再需要辅助类
DuckPhp\HttpServer\HttpServer

    从Core 中移出，完成 windows 支持
DuckPhp\SingletoEx\SingletoEx

    从Core 中移出，成为孤立的类
DuckPhp\ThrowOn\ThrowOn

    从Core 中移出，成为孤立的类
    
v1.2.5 变更
最大的不兼容变更是 Duckhp\App 入口类重命名成了 DuckPhp\DuckPhp 类
DuckPhp\Core\App
    现在是组件类 Platform() IsDebug() 可接管。
    DB($tag),DB_R(),DB_W() 有默认抛出异常的实现。
    add404RouteHook dumpAllRouteHooksAsString 新增
    setViewHeadFoot
    GET ，POST 等移动到 App 类里。
AppPluginTrait
    新增选项 plugin_url_prefix
    新增事件函数 onPluginModePrepare onPluginModeInit onPluginModeBeforeRun onPluginModeRun
    新增 方法 pluginModeBeforeRun
    pluginModeGetOldRoute
    OnURL _OnURL
AutoLoader 
    孤立化 autoload_cache_in_cli autoload_path_namespace_map
    spl_autoload_register(self::class.'::AutoLoad');
    DuckPhpSystemAutoLoader
ComponentBase
    DuckPhpSystemAutoLoader
Configerr
    exitWhenNoSettingFile
Functions 
    修复 __url
    
Kernel
    $options 通用化
    添加 use_autoloader 选项
    initAfterOverride initDefaultComponents
    onInit 拆分纯空函数
Logger
    调整使用 选项 'path_log' ,'log_file_template'
Route
    减少公开属性 dumpAllRouteHooksAsString
RuntimeState
    添加属性 use_output_buffer
    去掉 begin/end 用run/clear代替
View
    添加 reset()，给主流程用
    setViewWrapper => etViewHeadFoot
DB
    getPDO => PDO($new)
    beforeQueryHandler 的参数多了个 $this
DBInterface
    public function PDO($object = null);
    public function rowCount();
    public function lastInsertId();
CallableView
    修复 _Display;
EmptyView
    新增扩展
RouteHookManager
    新增路由钩子管理类
AppHelper
    新增一些管理函数
ControllerHelper
    移动 GPC 函数的实现
HelperTrait
    使用 SingletonEx
ModelHelper
    DB函数显化
示例代码修改
    

v1.2.2 发布。通过 phpstan level7 的检查，php-cs-fixer 的格式化。phpunit 的 100%覆盖测试。

应用层方面，C::Parameters() 改成 C::getParameters() ，这个只用于自定义路由。

其他都是上层的改动。
用于各种自定义的路由 RouteHookRouteMap 拆分成 route_map 和 route_map_important 两选项， 后者在默认文件路由前钩挂，用于比较重要的自定义路由。 前者用于默认文件路由后 404 处理
把当前站点改成组件化用的 AppPluginTrait 重写。如果没特殊使用，不需要改动。
Logger 类 放入核心目录。
Helper 类从 Core 核心目录移出。 核心框架不再包含。
App 类额外方法都咔嚓。 由 Ext 扩展类自行扩充。
Swoole 的支持方式变更，ext 扩展 + core/app 类方式完成。 
随行 demo 更新。

要做的： 
错误处理现在复杂化了，需要重新简化以更清晰。
需要添加 init 后 缓存，直接读取到 run 运行的 更快速运行方式。
AppPlugin 组件化的初始化默认应该加上 lazyload 模式，使得多加组件不影响启动效率。
需要添加适配各家框架 nginx 配置的插件 。各家 nginx 配置居然都有不同 :( 。

1.1.4到 1.1.5 变更
2019-12-02 15:12:13
添加了插件模式，添加了 log ，还有一堆东西，准备改名了。

1.1.3到 1.1.4 变更
2019-10-07 20:10:25
添加了 全覆盖测试。SwooleHttpd 以外的常用文件都全部覆盖。
修复了之前一些 bug.
添加了 .env 模式
1.1.2 到 1.1.3 变更
2019-09-22 22:09:20
DNMVCS 类的 很多功能移动到了 Core/App
autoload 不再用闭包，为了方便 profile
最低要求 PHP 7.1
架构图更新 ExModel 不再引用Model
删除了单独的 core  架构图（SwooleHttpd 依然保留。
swooleHttpd 的例子移动到相应目录
添加了单元测试
Helper 从 Base 目录抽出成 Helper 目录
ClassExt 不再需要 , Core/App 里使用 extendComponents
Core/App 变更
Core/App 和 Helper 一样 都扩展 ExtendableStaticCallTrait
    优化了 init() 过程
    和 SwooleExt 相关代码移动到 DNMVCS
SuperGlobal 下方到 Core

SwooleHttpd去掉 短名称

修复了很多 Bug，按 PHPStan level 7 来

TODO
抽出 SystemWraper
getStaticComponent 回到 App


1.0.9 到 1.0.10 变更
添加了 快速扩展的 DNClassExt
配置大更新
路由调整
OnBeforeShow 等 静态化
和 swoole DNSwooleExt 调整.


1.0.9 到 1.0.10 变更
2019-02-24 18:02:44
添加了 LICENSE 文件

DB 添加 driver_options 配置。
删除  DNDI.php DNSingleton.php DNThrowQuick.php ，以后将在外加项目里加这些类
DNMVCSExt 各功能类和 DNMVCS 主类 引用分离
DNSwooleHttpServer => DNSwooleExt 并做了可用性调整
SwooleHttpServer 做了大量变动，准备独立成 SwooleHttpd 项目
增加了 DNMVCS::Platform()
DNExceptionManager 防止多重载入
swoole 选项成了内置 SwooleHttpServer 的选项
一些 BUG 的修复
其他大量内部实现的变更。

基本稳定了。

1.0.8 到 1.0.9变更
大量的调整
DBExt => DBAdvance
Pager 集中 SG 方法到一个方法，方便迁移
文档结构大调整
RouteHookeRewriteAndMap 收入 DNMVCExt
SuperGlobal 改为 DNSuperGlobal 收入 DNMVCS 
DNSuperGlobal 增加了 _FILES 的实现。增加了 globals 语法， static 语法 类内 static 语法替换
RouteHookSuperGlobal 不需要了
拆解 DNSwooleHttpServer 成 SwooleHttpServer 和 DNMVCS 无关系
两者关系现在用 DNSwooleBridge 连接
SystemWrapper 融合进 DNMVCS ，并且在 SwooleHttpServer 有自己的实现。-- 两者共同实现 DNSystemWrapperInterface;
OneFile 模式的 SG::G() 也都改为 DN::SG();
DNDI 移入 DNMVCExt
spl_autoload_register 都不再用闭包，以增加 SwooleHttpServer 的方便
DNRoute 主功能重构。一大堆修改，需要多测试。为自动运行模式增加了效率。
default_method_for_miss
base_controller_class
_ShowBlock 修复
添加回 GetDBHandler
调整 DNRuntimeState
exit 用 exit_system  替代
HasInclude 移动到Toolkit
OneFileMode 调整
添加了 __callStatic 从当前类替换的类的静态方法里找
Run 函数里添加了 beforeRouteRun,删除 before_run_handler
RouteHookMapAndRewrite 重构
RouteHookOneFileMode 重构，利用了 RouteHookOneFileMode 部分代码
RouteHookDirectoryMode  添加了 mode_dir
DBReusePoolProxy 原来 DBPoolProxy ，移动到 ext 里
FacadesAutoLoader FacadesBase  添加了 facades 门面的实现


SetSessionName 已经取消
module-action 方式已处理 rewrite.

2019-02-05 20:02:14
----
1.0.7 到 1.0.8变更
DBExt 单独提成文件 ,MedooDB 因此变更
DNDI 可外放
namespace 选项 影响 base_class  ,namespace_controller
DNRoute 添加 stopRunDefaultHandler
DNView 删除 includeShowFiles 添加 prepareFiles ，FunctionView 由此改动
主类 DI() 改成由 DNMVCSExt 实现。
主类 添加 StartSession，删除  SystemWrapper 的函数
DNMVCSEXt key_for_simple_route=>key_for_action，添加 key_for_module
StrictService , StrictModel 改 trait ，外放
SwooleSuperGlobal,SwooleSESSION,SwooleSessionHandler 收入 DNSwooleHttpServer.php
StartSession 可添加选项

改了 template 。
TODO module-action 方式未处理 rewrite.
TODO SetSessionName 要取消
----
1.0.6 到 1.0.7变更

DBThrownQuickly 可外放成独立文件
Done  添加 DNDBInterface
DB 类 实现 DBInterface 接口 DBInterface 是希望数据库类实现的接口。
StrictService 部分无效,StrictModel 部分无效修复 ，use_strict_db_manager 部分无效修复。
use_function_dispatch  模式如果函数不存在则退回类的模式
Ext 模式添加 session_auto_start session_name
Done swoole 模式， handler 模式 加www 目录文件 兼容选项
TODO OneFile 模式，添加类选项。
Done  OneFile 模式里添加 $init_function 参数 
//swoole  选项里加  use_http_handler_root 以附加。
需要 DB_W , DB_R ，考虑后不会去掉。

----
1.0.5 到 1.0.6变更
修复  prefix_post 应该为 do_ 而不是 _do
----
1.0.4 到 1.0.5变更
DNDB 类改成 DB 类， DNMedoo 改成 MedooDB 
DNDB 类和 DBExt 类合并
DNRoute 类 添加选项 prefix_post
ShowBlock 现在可加 .php 后缀，也可以省
修复 DB_R ，现在 database_list 可以加键名 DB() 方法会默认使用第一个键名。
SuperGlobal 删除操作方法，现在只有用数组变量方式调用
只支持 swoole 4.2.0 及以上版本。
开始  swoole 服务前会有判断
删除了 DNService DNModel  类
start_server.php 加了默认端口 9528

TODO swoole 模式， handler 模式 加www 目录文件 兼容选项
TODO OneFile 模式，添加类选项。
TODO 不再需要 DB_W , DB_R
TODO ，添加 DNDBInterface ，规范数据库最小子集
----
1.0.3 到 1.0.4变更
SuperGlobal::SetSessionName($name) 代替 session_name($name);
ComposerScripts 添加 PostInstall
默认模版变更,现在头文件更清晰。直接运行工程模板将提示请勿直接运行，并且忽略设置文件
修复可能存在的合并 options 错误。 array_merge_recursive => array_replace_recursive
RunOneFileMode 添加参数 $init_function 用于初始化后修改方法
修复 SimpleRouteHook 错误导致 OneFile.php 演示不能进行。
首次使用 defer
修复 SuperGlobal 默认 session 错误

----
1.0.2 到 1.0.3变更
ComposerScripts 添加 PostUpdate 方法，用于 update 更新模板
析出 DNDB 自 DNMVCS.php ,明确 DNDB 不是 DNMVCS 的核心组件。
修复 因 DNMVCS_DNSINGLETON_REPALACER 宏不正确导致 swoole 协程单例无效
DNAutoLoader->namespace_paths =>public
增加 DNRoute->prefix_post 可调整post 方法前缀
DNRoute->getRouteHandlerByFile 抽出 getCurrentClassAndMethod 方法
DNView->header 调整到 DNMVCS::header(DNSystemWrapper->header)
相关的 DNView->setHeaderHandler 调整到 DNMVCS->setHandlerForHeader
DNView->onBeforeShow => DNView->setBeforeShowHandler
重写了 DNDBManager
$options['rewrite_list']=$options['rewrite_map']
$options['route_list']=$options['route_map'];
DNMVCS::Debugging => DNMVCS::Developing
添加
InSwoole
IsRunning
setDBHandler
setBeforeGetDBHandler
header
setcookie
setHandlerForHeader
setHandlerForSetCookie
添加
DNRuntimeState
删除 $options['skip_db']
添加 DNRuntimeState 类保存运行时间系统状态

class StrictDBManager  去掉，用 setBeforeGetDBHandler DNMVCSExt CheckDBPermission 代替
未使用的 MedooSimpleInstaller 移动到 Toolkit.php
修复 $options['ext']['use_ext_db'] 无效

添加 CoroutineSingleton::DumpString
删除无用的 IRouteHook.php

RouteHookSuperGlobal 添加 $fakeRoot $fakeIndex 可在 swoole 下设定伪路径

重写 SuperGlobal 删除子类。
相应的 SwooleSuperGlobal 重写

模板文件的包含部分变更。


todo session_name($name) 改变 session 默认名字在 swoole 下无效。

----
1.0.1 到 1.0.2 变更
ShowBlock 由类方法变成静态方法
添加了 setmultiexception
---