CodeIgniter4 從老版本升級

2020-08-17 14:01 更新

請閱讀你需要升級的版本所對應(yīng)的升級指南

從CodeIgniter 3系列版本升級到4系列版本

CodeIgniter 4是對該框架的重寫,并且不向前兼容(對以前的版本不兼容)。 比起升級你的應(yīng)用,更為合適的是轉(zhuǎn)換和重寫它。當(dāng)你做完了這一步(即已經(jīng)升級到CodeIgniter4)之后,在CodeIgniter4的不同版本間進行升級就會輕而易舉。

The “l(fā)ean, mean and simple” philosophy has been retained, but the implementation has a lot of differences, compared to CodeIgniter 3.

升級過程中并沒有12步檢查列表之類的東西。取而代之的是,在一個新的項目文件夾里開始CodeIgniter 4的重新部署 開始與使用本框架 , 并開始轉(zhuǎn)換和整合你的應(yīng)用部件。下面我們會試著指出最需要注意的點。

CI4中我們并沒有完全遷移和重寫全部的CI3庫!參考 CodeIgniter 4 路線圖 中的最新列表!

在項目轉(zhuǎn)換之前 請務(wù)必閱讀用戶指南 !

下載

  • CI4同樣可以通過解壓-運行的zip或tarball壓縮文件的格式進行使用,其中包含有用戶指南(在 docs 子目錄中)
  • 它也可以通過Composer進行安裝

命名空間

  • CI4構(gòu)建基于PHP7.2+的版本,框架中除了輔助函數(shù)的所有部分都進行了命名空間標(biāo)注。

應(yīng)用結(jié)構(gòu)

  • application 目錄被重命名為 app ,而框架中仍舊存在著 system 文件夾,有著與以往版本一樣的功能。
  • 本框架現(xiàn)在提供了一個 public 目錄,希望你可以將其用于項目的根目錄
  • There is also a writable folder, to hold cache data, logs, and session data
  • app 目錄與CI3中的 application 目錄類似,不過有著一些命名的變更,以及將一些子目錄移動到 writable 目錄下。
  • 如今已經(jīng)沒有一個嵌套的 application/core 目錄了,由于我們已經(jīng)提供了一套不同的機制來擴展框架核心(如下所示)。

加載類文件

  • 由于對框架組件的引用如今已作為屬性動態(tài)注入到你的控制器中,現(xiàn)在已經(jīng)不存在一個CodeIgniter的”超級對象”了。
  • 類如今已經(jīng)按需加載了,并且組件也是通過 Services 進行維護(服務(wù))
  • 類加載器自動處理PSR4風(fēng)格的類文件定位,對于那些以 App``(application目錄)和 ``CodeIgniter system目錄) 為頂級命名空間的類。而通過對composer自動加載的支持與智能假設(shè)機制,框架甚至可以定位你的那些并未命名空間聲明的模型和庫文件。
  • 你可以配置類的自動加載來支持任何你喜歡的應(yīng)用結(jié)構(gòu),包括”HMVC”風(fēng)格的(譯者注:按等級劃分的MVC模式,簡單的解釋就是把MVC又細分成了多個子MVC,每個模塊就分成一個MVC)

控制器

  • 控制器繼承了 \\CodeIgniter\\Controller 類,而非 CI_Controller
  • 控制器不再需要一個構(gòu)造函數(shù)了(用于調(diào)用CI魔術(shù)方法),除非這是你自己定義的基類控制器的一部分
  • CI 提供了 Request (請求)and Response (響應(yīng))對象供你使用,比起CI3的風(fēng)格來說更為強大
  • 如果你需要一個基類控制器(比如CI3中的MY_Controller),那么請在你需要的地方使用就行。比如 BaseController extends Controller ,并使用你自己的類來繼承 BaseController

模型

  • 模型繼承了 \\CodeIgniter\\Model 而非 CI_Model
  • CI4的模型擁有更多的功能,包括動態(tài)數(shù)據(jù)庫連接,基礎(chǔ)的CRUD(增刪改查),模型內(nèi)驗證和自動分頁功能。
  • CI4 同樣擁有可供你構(gòu)建的 Entity (實體)類,用于實現(xiàn)更為豐富的數(shù)據(jù)表映射功能
  • 取消使用CI3的 $this->load->model(x); ,而是使用模型的命名空間模式來調(diào)用 $this->x = new X();。

視圖

  • 你的視圖看起來與從前類似,但是卻是以完全不同的方式調(diào)用……取消使用 $this->load->view(x); ,而是通過 echo view(x);。
  • CI4支持視圖單元,以構(gòu)建分片響應(yīng)
  • 模板處理器一如過往,但是在功能上有了顯著的提升

  • 你的應(yīng)用類仍舊可以深入訪問 app/Libraries,但這不是必須的。
  • 取消使用CI3的 $this->load->library(x); 調(diào)用方式,如今你可以使用組件的命名空間模式來調(diào)用 $this->x = new X();

輔助函數(shù)

  • 輔助函數(shù)與以往大致相似,不過有一部分被簡化了

事件

  • Hooks(鉤子)如今已經(jīng)被Events(事件)所取代
  • 取消使用CI3的 $hook['post_controller_constructor'] 調(diào)用方式,如今你可以使用命名空間 CodeIgniter\Events\Events; 下的 Events::on('post_controller_constructor', ['MyClass', 'MyFunction']); 。
  • 事件保持啟用狀態(tài)并全局可用。

擴展框架

  • 你不需要一個 core 目錄來保存類似 MY_... 的框架組件擴展或替代品。
  • 在庫目錄下,你不需要類似 MY_x 之類的類來繼承或取代CI4的框架部分。
  • 你可以在任何地方創(chuàng)建這樣的類,并加入適當(dāng)?shù)淖远x組件來代替默認的那些組件。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號