從CodeIgniter 3系列版本升級到4系列版本?
CodeIgniter 4是對該框架的重寫,并且不向前兼容(對以前的版本不兼容)。 比起升級你的應用,更為合適的是轉換和重寫它。當你做完了這一步(即已經升級到CodeIgniter4)之后,在CodeIgniter4的不同版本間進行升級就會輕而易舉。
The “lean, mean and simple” philosophy has been retained, but the implementation has a lot of differences, compared to CodeIgniter 3.
升級過程中并沒有12步檢查列表之類的東西。取而代之的是,在一個新的項目文件夾里開始CodeIgniter 4的重新部署 開始與使用本框架 , 并開始轉換和整合你的應用部件。下面我們會試著指出最需要注意的點。
CI4中我們并沒有完全遷移和重寫全部的CI3庫!參考 CodeIgniter 4 路線圖 中的最新列表!
在項目轉換之前 請務必閱讀用戶指南 !
下載
- CI4同樣可以通過解壓-運行的zip或tarball壓縮文件的格式進行使用,其中包含有用戶指南(在 docs 子目錄中)
- 它也可以通過Composer進行安裝
命名空間
- CI4構建基于PHP7.2+的版本,框架中除了輔助函數的所有部分都進行了命名空間標注。
應用結構
application
目錄被重命名為app
,而框架中仍舊存在著system
文件夾,有著與以往版本一樣的功能。- 本框架現在提供了一個
public
目錄,希望你可以將其用于項目的根目錄 - There is also a
writable
folder, to hold cache data, logs, and session data app
目錄與CI3中的application
目錄類似,不過有著一些命名的變更,以及將一些子目錄移動到writable
目錄下。- 如今已經沒有一個嵌套的
application/core
目錄了,由于我們已經提供了一套不同的機制來擴展框架核心(如下所示)。
加載類文件
- 由于對框架組件的引用如今已作為屬性動態注入到你的控制器中,現在已經不存在一個CodeIgniter的”超級對象”了。
- 類如今已經按需加載了,并且組件也是通過
Services
進行維護(服務) - 類加載器自動處理PSR4風格的類文件定位,對于那些以
App``(application目錄)和 ``CodeIgniter
system目錄) 為頂級命名空間的類。而通過對composer自動加載的支持與智能假設機制,框架甚至可以定位你的那些并未命名空間聲明的模型和庫文件。 - 你可以配置類的自動加載來支持任何你喜歡的應用結構,包括”HMVC”風格的(譯者注:按等級劃分的MVC模式,簡單的解釋就是把MVC又細分成了多個子MVC,每個模塊就分成一個MVC)
控制器
- 控制器繼承了
\\CodeIgniter\\Controller
類,而非CI_Controller
類 - 控制器不再需要一個構造函數了(用于調用CI魔術方法),除非這是你自己定義的基類控制器的一部分
- CI 提供了
Request
(請求)andResponse
(響應)對象供你使用,比起CI3的風格來說更為強大 - 如果你需要一個基類控制器(比如CI3中的MY_Controller),那么請在你需要的地方使用就行。比如
BaseController extends Controller
,并使用你自己的類來繼承BaseController
模型
- 模型繼承了
\\CodeIgniter\\Model
而非CI_Model
- CI4的模型擁有更多的功能,包括動態數據庫連接,基礎的CRUD(增刪改查),模型內驗證和自動分頁功能。
- CI4 同樣擁有可供你構建的
Entity
(實體)類,用于實現更為豐富的數據表映射功能 - 取消使用CI3的
$this->load->model(x);
,而是使用模型的命名空間模式來調用$this->x = new X();
。
視圖
- 你的視圖看起來與從前類似,但是卻是以完全不同的方式調用……取消使用
$this->load->view(x);
,而是通過echo view(x);
。 - CI4支持視圖單元,以構建分片響應
- 模板處理器一如過往,但是在功能上有了顯著的提升
庫
- 你的應用類仍舊可以深入訪問
app/Libraries
,但這不是必須的。 - 取消使用CI3的
$this->load->library(x);
調用方式,如今你可以使用組件的命名空間模式來調用$this->x = new X();
輔助函數
- 輔助函數與以往大致相似,不過有一部分被簡化了
事件
- Hooks(鉤子)如今已經被Events(事件)所取代
- 取消使用CI3的
$hook['post_controller_constructor']
調用方式,如今你可以使用命名空間CodeIgniter\Events\Events;
下的Events::on('post_controller_constructor', ['MyClass', 'MyFunction']);
。 - 事件保持啟用狀態并全局可用。
擴展框架
- 你不需要一個
core
目錄來保存類似MY_...
的框架組件擴展或替代品。 - 在庫目錄下,你不需要類似
MY_x
之類的類來繼承或取代CI4的框架部分。 - 你可以在任何地方創建這樣的類,并加入適當的自定義組件來代替默認的那些組件。