<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # ThinkPHP5開發的正確姿勢 > ### 本篇的建議旨在讓你的ThinkPHP5開發更規范和順利,但僅僅是建議,而不是必須。(內容會不斷補充) ## 變量篇 1. 避免直接獲取系統變量,用`Request`對象的相關方法替代; 2. 不用`get`或者`post`方法獲取請求變量,而是用`param`方法替代; 3. 使用操作方法的參數綁定功能,而不是自己手動獲取請求參數; 4. 使用依賴注入和`Request`屬性注入; 5. 用Request類的`getInput`方法替代`file_get_contents('php://input')`; 6. 模板中輸出系統變量使用`{$Request.param.name}`的方式; 7. 多使用Request類的`only`和`except`方法獲取多個請求變量; ## 路由篇 1. 用動態注冊方法而不是路由配置; 2. 不要在路由配置文件之外定義路由; 3. 用`get`/`post`/`delete`/`put`等路由注冊方法明確指定請求類型; 4. 保證路由變量和操作方法的參數綁定命名一致(包括可選); 5. 路由地址保持和實際的控制器名和方法名一致(包括大小寫); 6. 為每個路由變量明確指定變量規則; 7. 用路由分組簡化路由定義和公共參數; 8. 盡可能使用強制路由并配合MISS路由; 9. 優先考慮資源路由尤其是API開發的時候; 10. 考慮在路由后置行為中進行統一的權限檢測; 11. 部署后記得執行路由緩存指令; ## 控制器篇 1. 建議開啟`controller_suffix`配置參數,并采用`IndexController`命名控制器類; 2. 原則上控制器類不需要繼承`think\Controller`; 3. 給你的控制器類繼承一個公共的基類例如`Base`便于統一調整; 4. 需要的話在你的基礎控制器類中引入`traits\controller\Jump`; 5. API開發盡量使用資源控制器(命令行php think create:controller 可以快速生成); 6. 控制器類中避免寫太多的業務邏輯,交由模型類完成; 7. 盡量避免直接操作數據庫類,而是在模型類中做好封裝; 8. 可能的話盡量在控制器層完成數據驗證; 9. 不要試圖在初始化方法中調用`redirect`助手函數,而用`$this->redirect`方法替代; 10. 始終在控制器方法中`return`而不是`echo`以免影響請求緩存; 11. 用`json`、`view`以及`redirect`助手函數進行響應輸出; 12. 用`abort`助手函數拋出HTTP異常; 13. 遵循駝峰法命名你的控制器類和文件名; ## 數據庫篇 1. 千萬不要用駝峰法命名數據表和字段; 2. 如非必要避免直接操作Db類; 3. 用Db類的`name`方法而不是`table`方法; 4. 用視圖查詢`view`方法替代`join`方法; 5. 查詢操作盡可能的使用`field`方法,哪怕是`field(true)`; 6. 如果要批量執行SQL語句使用`batchQuery`方法; 7. 用`value`方法獲取單個記錄的某個字段值; 8. 用`column`方法獲多條記錄的某個(或者某些)字段值; 9. 靈活使用`cache`方法進行查詢緩存處理和刪除(不僅是查詢可以用`cache`方法); 10. 使用`fetchSql`方法直接返回sql語句而不實際執行CURD; 11. 部署之后記得執行命令行的`php think optimize:schema`指令; 12. `strict`方法可以避免多余的數據字段拋出異常; 13. 關于日期和時間的查詢不妨試試`whereTime`方法; 14. 數據庫的大多數操作都是自動參數綁定的,一般情況下無需手動使用`bind`方法; 15. `insert`方法返回的是影響的記錄數而不是主鍵; 16. 使用`insertGetId`方法插入數據并返回主鍵; 17. `delete(true)`可以無條件的刪除數據; 18. `select`和`find`方法支持閉包,但盡量不要和鏈式操作混用; 19. 需要查詢大量數據并且分批處理的話使用`chunk`方法; 20. 對find方法使用主鍵查詢并且cache(true)的話緩存是自動更新的; ## 模型篇 不要以為模型性能比Db差,這點差別還不抵不過一條SQL查詢,而帶來的便利是樂觀的; 模型的好處千言萬語抵不過兩個字:對象(明白人都會懂);
                  <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>

                              哎呀哎呀视频在线观看