W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
每次CodeIgniter 運(yùn)行時(shí),都有一些基礎(chǔ)類伴隨著核心框架自動(dòng)的被初始化。但你也可以使用你自己的類來替代這些核心類或者擴(kuò)展這些核心類。
大多數(shù)用戶一般不會(huì)有這種需求,但對于那些想較大幅度的改變 CodeIgniter 核心的人來說,我們依然提供了替換和擴(kuò)展核心類的選擇。
注解
變動(dòng)核心系統(tǒng)類意味著一系列的挑戰(zhàn),所以,請三思后行。
以下是系統(tǒng)核心文件的列表,它們在每次 CodeIgniter 啟動(dòng)時(shí)被調(diào)用:
要使用你的系統(tǒng)類替換 CodeIgniter 默認(rèn)的系統(tǒng)類時(shí),首先確保 Autoloader 能找到你的類;其次你的新類繼承了正確的接口,同時(shí)修改 Service 以保證加載的是你自己的類。
例如,你有一個(gè)名為 AppLibrariesRouteCollection
的新類想要替換系統(tǒng)的核心類,你應(yīng)該像這樣創(chuàng)建你的類:
class RouteCollection implements \CodeIgniter\Router\RouteCollectionInterface
{
}
然后,你應(yīng)該修改路由文件來加載你自己的類:
public static function routes($getShared = false)
{
if (! $getShared)
{
return new \App\Libraries\RouteCollection();
}
return self::getSharedInstance('routes');
}
如果你需要往一個(gè)現(xiàn)有的庫里添加一些功能-或許只是添加一兩個(gè)方法,重寫這整個(gè)庫顯然是沒必要的。這時(shí)更好的通常是對其中的類進(jìn)行擴(kuò)展。對類進(jìn)行擴(kuò)展與替換掉類幾乎相同,除了一點(diǎn):
比如,繼承 RouteCollection 這個(gè)原生類,你應(yīng)該這樣聲明:
class RouteCollection extends \CodeIgniter\Router\RouteCollection
{
}
如果你需要在類中使用構(gòu)造器來確保子類繼承了父類的構(gòu)造器:
class RouteCollection implements \CodeIgniter\Router\RouteCollection
{
public function __construct()
{
parent::__construct();
}
}
Tip: 在你自己的類中,所有與父類方法名相同的函數(shù)將會(huì)覆蓋父類方法,此為”方法覆蓋”. 這樣你就可以充分地改動(dòng)CodeIgniter 的核心類。
你若擴(kuò)展了控制器核心類,則需確保你的新類繼承了應(yīng)用下的控制器類的構(gòu)造器:
class Home extends App\BaseController {
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: