<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 2019 年 1 月 30 日 發布 本次更新了大量的細節,進一步統一和精簡了用法,并且新增了一些功能。 >[danger] 在正式版發布之前,不建議用于正式項目,目前也還沒有完善的文檔和詳細的測試。 ## 主要更新 相比較`beta2`版本([`Beta2`版本更新參考這里](https://blog.thinkphp.cn/852702)),除了一些修正和改進外,主要包含了如下的功能更新和調整。 ### 視圖和模板引擎從核心分離 視圖和模板引擎類不再內置到核心框架,需要的時候可以單獨通過 ``` composer require topthink/think-view ``` 安裝,如果使用 ``` composer create-project topthink/think ``` 會默認安裝該組件(如果不需要使用的話可以自己卸載`topthink/think-view`)。 安裝后,由于內置的`think\Controller`類不再封裝視圖方法,如果你的控制器類需要調用`fetch`/`display`/`assign`等視圖方法,必須繼承 `think\ViewController`類,使用`view`助手函數方式用法不變。 ### 取消數據庫的`setInc`/`setDec`/`setField`方法 原來的`setInc`/`setDec`/`setField`方法不再支持,使用`inc`/`dec`/`update`方法替代。例如: ``` Db::name('user')->where('id', 1) ->inc('exp') ->dec('score') ->update(); ``` ### 取消查詢`eq/neq/gt/lt/egt/elt`表達式 由于存在兩種用法,并且不夠直觀,全部統一為更直觀的用法。 下面的用法不再支持 ``` Db::name('user')->where('id', 'egt', 1) ->where('status', 'neq' ,1) ->select(); ``` 統一使用 ``` Db::name('user')->where('id', '>=', 1) ->where('status', '<>' ,1) ->select(); ``` ### 取消分表功能 出于分表的性能問題和復雜性,不再提供分表方法,建議使用數據庫的分區功能替代。 ### 增加年/月/日的便捷日期查詢方法 可以使用下面的便捷日期查詢 ``` // 查詢2018年的博客數 Db::name('blog')->whereYear('create_time', '2018')->count(); // 查詢2018年12月的博客數 Db::name('blog')->whereMonth('create_time', '2018-12')->count(); // 查詢2018年12月24日的博客數 Db::name('blog')->whereDay('create_time', '2018-12-24')->count(); ``` ### `query`原生查詢也可以支持查詢緩存 使用query進行SQL語句查詢的時候也可以支持查詢緩存,例如: ``` Db::cache('cache_key')->query("select * from blog where create_time > '2018-12-1'"); ``` 如果使用了數據庫的讀寫分離,需要從主庫查詢的話,需要使用 ``` Db::master(true)->query("select * from blog where create_time > '2018-12-1'"); ``` ### 數據庫的查詢統計合并 數據庫的查詢次數合并到`queryTimes`,不再區分讀寫操作,你可以使用下面的方法獲取當前請求的數據庫查詢次數(包括讀寫) ``` Db::getQueryTimes(); ``` ### 模型延遲自動保存 模型增加延遲保存方法`lazySave`,調用該方法后不會馬上保存數據,僅僅是保存在內存中,當前模型對象銷毀的時候或者下次顯式調用`save`方法的時候都會自動保存到數據庫。 ``` $user = User::find(1); $user->name = 'thinkphp'; $user->lazySave(); ... $user->score = 100; $user->save(); ``` ### 模型事件調整 模型事件不再支持使用`event`方法注冊事件,統一使用模型事件觀察者類,你只需要在模型定義或者初始化的時候設置`observerClass`屬性。 ``` <?php namespace app\index\model; use think\Model; class User extends Model { protected $observerClass = 'app\index\observe\User'; } ``` 所有的模型事件統一在觀察者類中進行定義,方法的命名規范如下: ``` <?php namespace app\index\observe; class User { public function onAfterRead($user){ $user->extra = 'extra'; } public function onBeforeWrite($user){ $user->extra = 'extra'; } } ``` 并且模型增加`after_read`事件,在查詢后創建模型對象實例的時候觸發。 ### 模型屬性和數據表字段的對應關系 默認情況下,模型對象數據字段嚴格區分大小寫,你可以關閉嚴格模式(前提是必須保持數據表字段的小寫和下劃線定義規范),然后在模型中使用的時候,如果使用駝峰命名調用,則會自動轉換為小寫和下劃線規范的字段(關連模型除外),例如: ``` <?php namespace app\index\model; use think\Model; class User extends Model { protected $strict = false; } ``` 然后,下面的代碼 ``` $user = User::find(); echo $user->nick_name; $user->nick_name = 'test'; $user->save(); ``` 和下面的用法是等效的 ``` $user = User::find(); echo $user->nickName; $user->nickName = 'test'; $user->save(); ``` >[danger] 如果你的數據表字段不符合規范(存在大小寫混合使用的情況),那么必須在模型中開啟`strict`屬性。 ### 增加樂觀鎖功能 和軟刪除一樣,增加了一個`think\model\concern\OptimLock`Trait用于方便引入擴展模型的樂觀鎖功能。 ``` <?php namespace app\index\model; use think\model\conern\OptimLock; use think\Model; class User extends Model { use OptimLock; protected $optimLock = 'lock_version'; } ``` ### 增加`PSR-11`支持 支持`PSR-11`規范,增加`psr/container`依賴,`Container`類增加`pull`方法替代之前的靜態`get`方法。 ### 增加閉包數據的緩存序列化支持 添加了`opis/closure`依賴用于支持閉包的序列化支持。 ### 增加自動多應用支持 支持在同一個入口文件中訪問多個應用,并且支持應用的映射關系以及自定義。 例如在`index.php`入口文件中使用: ~~~ (new App())->autoMulti()->run()->send(); ~~~ 就可以不必創建入口文件自動通過URL訪問多個應用 ~~~ http://serverName/index.php/admin ~~~ 如果你的默認應用不是`index`(默認為入口文件名),那么可以通過`name`方法指定默認應用。 ~~~ (new App())->autoMulti() ->name('admin') ->run() ->send(); ~~~ 支持應用名的別名映射,例如: ~~~ (new App())->autoMulti([ 'think' => 'admin', // 把admin應用映射為think ])->run()->send(); ~~~ 如果需要對某個應用進行自定義,可以使用 ~~~ (new App())->autoMulti([ 'admin' => function($app) { $app->debug(true)->useClassSuffix(); } ])->run()->send(); ~~~ ### 取消別名路由 因為使用場景有限和性能開銷問題,取消原來的別名路由功能,建議使用資源路由或者單獨的路由替代。 ### 取消快捷路由 因為使用場景有限和不太符合規范,取消了原來的控制器快捷路由功能。 ### 取消空操作功能 建議使用分組MISS路由功能替代。 ### 應用類庫后綴規范 取消了`controller_suffix`和`class_suffix`配置參數,App類增加了`controllerSuffix`方法用于開啟控制器類庫的`Controller`后綴(默認不開啟)。其它應用類庫的后綴由項目自己決定,框架不再強制規范。 >[danger] 需要注意的是,如果你的模型類命名使用了`Model`后綴的話,一定要定義`name`屬性或者`table`屬性。 ### 異常響應輸出類型 增加`exception_response_type`配置參數用于設置異常響應輸出的類型,默認為`html`類型。如果你的應用全部用于接口開發,可以配置為`json`類型。 ## 更新日志 ### 路由 * 路由檢測作為`AppInit`事件響應獨立出App類,可配置事件定義文件不使用路由功能 * 路由定義的方法簡化`option`和`pattern`參數,統一使用方法進行路由參數和變量規則設置 * 取消別名路由和快捷路由功能 * 取消多級控制器的自動搜索功能 * 路由分組不再支持數組方式定義分鐘下面的路由規則 * 取消路由的`mergeExtraVars`方法和設置 * 提升路由變量替換的性能 * 判斷路由規則定義添加對請求類型的判斷 * 路由地址支持`Dispatch`對象 ### 數據庫和模型 * 改進模型的數據類型強制轉換對`Expression`對象的支持 * 模型查詢統一返回對象 取消`findOrEmpty`方法 模型類增加`isEmpty`方法 * 增加`raw`助手函數 * 修正`mysql`的`regexp`查詢 * 改進聚合查詢方法的`field`參數支持`Expression ` * `where`方法支持傳入`Query`對象 * 改進`Connection`類`getRealSql`方法 * Query類`cache`方法支持傳入`CacheItem`類 * Query類`find/select/cursor`方法不再支持閉包 * 模型增加`lazySave`方法 用于延遲自動保存 * 統一模型數據的讀取和寫入,支持駝峰和下劃線自動智能識別 * 取消數據庫的分表功能支持 * 改進`join`方法支持參數綁定 * 取消`setInc`/`setDec`方法和`setField`方法 * 模型增加`strict`屬性 支持開啟字段區分大小寫 默認不區分,數據庫字段強制使用小寫 * 取消查詢方法的`eq neq lt gt elt egt`等表達式 * 統一模型事件為使用模型事件觀察者 廢棄`event`方法注冊模型事件 * 增加`after_read`模型事件 * 增加`whereYear`/`whereMonth`/`whereDay`查詢方法 * Query類`query`方法支持查詢緩存 * 增加`procedure`方法用于指定是否為存儲過程調用 * 簡化`cursor`、`query`和`execute`方法參數 * 廢棄數據庫執行次數 合并到查詢次數 * Connection類`getCursor`方法調整 取消`relation`參數 * 取消一對一關聯的`setEagerlyType`方法 * 改進軟刪除`destory`方法重復執行事件的問題 * 修正多對多中間表的寫入 * 改進關聯模型的`save`方法 * 增加樂觀鎖`Trait` ### 控制器 * 取消`ActionBegin`事件 * 改進控制器中間件執行 * 修正控制器名稱獲取 * 改進App類的`useClassSuffix`方法的默認值 * 取消`controller_suffix`配置,改用App類的`controllerSuffix`方法設置 * 取消 `url_controller_layer `配置,改用App類的`controllerLayer`方法設置 * 取消 `class_suffix `配置 * 取消`App`類的`action`方法 * 取消`empty_controller`配置,改用`App`類的`emptyController`方法設置 * 取消空操作 ### 緩存 * 改進緩存`CacheItem`類增加`expire`和`tag`方法支持 * 改進`CacheItem`類`getExpire`方法 * 改進`CacheItem`的緩存有效期處理 * 改進緩存類的`remember`方法 * FIX:當使用`complex`緩存的時候,通過`store`方法選擇驅動,提供給`connect`的參數類型錯誤 * 改進Redis緩存驅動的`tag`支持 * 改進`Redis`驅動 * 改進緩存類 取消`xcache`驅動 * 改進緩存標簽的獲取 * 增加緩存序列化的閉包支持 ### 驗證 * 改進`unique`驗證方法 * 改進驗證類的自定義驗證正則 * 驗證方法調整 * 增加`validate`助手函數 ## 其它 * 改進`Cookie`類的`setCookie`方法 * `App`類增加`classBaseName`方法 * 改進`Url`生成的端口問題 * 修正`Request`類`param`方法 * 語言檢測、路由檢查、請求緩存功能獨立作為事件響應 * `Request`增加單獨的`middleware`方法傳遞中間件變量 * 取消`App`類的`log`方法 * 增加`exception_response_type`配置參數
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看