從CodeIgniter 3系列版本升級(jí)到4系列版本?
CodeIgniter 4是對(duì)該框架的重寫,并且不向前兼容(對(duì)以前的版本不兼容)。 比起升級(jí)你的應(yīng)用,更為合適的是轉(zhuǎn)換和重寫它。當(dāng)你做完了這一步(即已經(jīng)升級(jí)到CodeIgniter4)之后,在CodeIgniter4的不同版本間進(jìn)行升級(jí)就會(huì)輕而易舉。
The “l(fā)ean, mean and simple” philosophy has been retained, but the implementation has a lot of differences, compared to CodeIgniter 3.
升級(jí)過程中并沒有12步檢查列表之類的東西。取而代之的是,在一個(gè)新的項(xiàng)目文件夾里開始CodeIgniter 4的重新部署 開始與使用本框架 , 并開始轉(zhuǎn)換和整合你的應(yīng)用部件。下面我們會(huì)試著指出最需要注意的點(diǎn)。
CI4中我們并沒有完全遷移和重寫全部的CI3庫!參考 CodeIgniter 4 路線圖 中的最新列表!
在項(xiàng)目轉(zhuǎn)換之前 請(qǐng)務(wù)必閱讀用戶指南 !
下載
- CI4同樣可以通過解壓-運(yùn)行的zip或tarball壓縮文件的格式進(jìn)行使用,其中包含有用戶指南(在 docs 子目錄中)
- 它也可以通過Composer進(jìn)行安裝
命名空間
- CI4構(gòu)建基于PHP7.2+的版本,框架中除了輔助函數(shù)的所有部分都進(jìn)行了命名空間標(biāo)注。
應(yīng)用結(jié)構(gòu)
application
目錄被重命名為app
,而框架中仍舊存在著system
文件夾,有著與以往版本一樣的功能。- 本框架現(xiàn)在提供了一個(gè)
public
目錄,希望你可以將其用于項(xiàng)目的根目錄 - There is also a
writable
folder, to hold cache data, logs, and session data app
目錄與CI3中的application
目錄類似,不過有著一些命名的變更,以及將一些子目錄移動(dòng)到writable
目錄下。- 如今已經(jīng)沒有一個(gè)嵌套的
application/core
目錄了,由于我們已經(jīng)提供了一套不同的機(jī)制來擴(kuò)展框架核心(如下所示)。
加載類文件
- 由于對(duì)框架組件的引用如今已作為屬性動(dòng)態(tài)注入到你的控制器中,現(xiàn)在已經(jīng)不存在一個(gè)CodeIgniter的”超級(jí)對(duì)象”了。
- 類如今已經(jīng)按需加載了,并且組件也是通過
Services
進(jìn)行維護(hù)(服務(wù)) - 類加載器自動(dòng)處理PSR4風(fēng)格的類文件定位,對(duì)于那些以
App``(application目錄)和 ``CodeIgniter
system目錄) 為頂級(jí)命名空間的類。而通過對(duì)composer自動(dòng)加載的支持與智能假設(shè)機(jī)制,框架甚至可以定位你的那些并未命名空間聲明的模型和庫文件。 - 你可以配置類的自動(dòng)加載來支持任何你喜歡的應(yīng)用結(jié)構(gòu),包括”HMVC”風(fēng)格的(譯者注:按等級(jí)劃分的MVC模式,簡單的解釋就是把MVC又細(xì)分成了多個(gè)子MVC,每個(gè)模塊就分成一個(gè)MVC)
控制器
- 控制器繼承了
\\CodeIgniter\\Controller
類,而非CI_Controller
類 - 控制器不再需要一個(gè)構(gòu)造函數(shù)了(用于調(diào)用CI魔術(shù)方法),除非這是你自己定義的基類控制器的一部分
- CI 提供了
Request
(請(qǐng)求)andResponse
(響應(yīng))對(duì)象供你使用,比起CI3的風(fēng)格來說更為強(qiáng)大 - 如果你需要一個(gè)基類控制器(比如CI3中的MY_Controller),那么請(qǐng)?jiān)谀阈枰牡胤绞褂镁托?。比?
BaseController extends Controller
,并使用你自己的類來繼承BaseController
模型
- 模型繼承了
\\CodeIgniter\\Model
而非CI_Model
- CI4的模型擁有更多的功能,包括動(dòng)態(tài)數(shù)據(jù)庫連接,基礎(chǔ)的CRUD(增刪改查),模型內(nèi)驗(yàn)證和自動(dòng)分頁功能。
- CI4 同樣擁有可供你構(gòu)建的
Entity
(實(shí)體)類,用于實(shí)現(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)并全局可用。
擴(kuò)展框架
- 你不需要一個(gè)
core
目錄來保存類似MY_...
的框架組件擴(kuò)展或替代品。 - 在庫目錄下,你不需要類似
MY_x
之類的類來繼承或取代CI4的框架部分。 - 你可以在任何地方創(chuàng)建這樣的類,并加入適當(dāng)?shù)淖远x組件來代替默認(rèn)的那些組件。