CodeIgniter4 創(chuàng)建核心系統(tǒng)類

2020-08-17 13:34 更新

每次CodeIgniter 運(yùn)行時(shí),都有一些基礎(chǔ)類伴隨著核心框架自動(dòng)的被初始化。但你也可以使用你自己的類來替代這些核心類或者擴(kuò)展這些核心類。

大多數(shù)用戶一般不會(huì)有這種需求,但對于那些想較大幅度的改變 CodeIgniter 核心的人來說,我們依然提供了替換和擴(kuò)展核心類的選擇。

注解

變動(dòng)核心系統(tǒng)類意味著一系列的挑戰(zhàn),所以,請三思后行。

系統(tǒng)類列表

以下是系統(tǒng)核心文件的列表,它們在每次 CodeIgniter 啟動(dòng)時(shí)被調(diào)用:

  • ConfigServices
  • CodeIgniterAutoloaderAutoloader
  • CodeIgniterConfigDotEnv
  • CodeIgniterController
  • CodeIgniterDebugExceptions
  • CodeIgniterDebugTimer
  • CodeIgniterEventsEvents
  • CodeIgniterHTTPCLIRequest (if launched from command line only)
  • CodeIgniterHTTPIncomingRequest (if launched over HTTP)
  • CodeIgniterHTTPRequest
  • CodeIgniterHTTPResponse
  • CodeIgniterHTTPMessage
  • CodeIgniterLogLogger
  • CodeIgniterLogHandlersBaseHandler
  • CodeIgniterLogHandlersFileHandler
  • CodeIgniterRouterRouteCollection
  • CodeIgniterRouterRouter
  • CodeIgniterSecuritySecurity
  • CodeIgniterViewView
  • CodeIgniterViewEscaper

替換核心類

要使用你的系統(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');
}

擴(kuò)展核心類

如果你需要往一個(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 {


}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)