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

2020-08-17 13:34 更新

每次CodeIgniter 運行時,都有一些基礎類伴隨著核心框架自動的被初始化。但你也可以使用你自己的類來替代這些核心類或者擴展這些核心類。

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

注解

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

系統類列表

以下是系統核心文件的列表,它們在每次 CodeIgniter 啟動時被調用:

  • 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

替換核心類

要使用你的系統類替換 CodeIgniter 默認的系統類時,首先確保 Autoloader 能找到你的類;其次你的新類繼承了正確的接口,同時修改 Service 以保證加載的是你自己的類。

例如,你有一個名為 AppLibrariesRouteCollection 的新類想要替換系統的核心類,你應該像這樣創(chuàng)建你的類:

  1. class RouteCollection implements \CodeIgniter\Router\RouteCollectionInterface
  2. {
  3. }

然后,你應該修改路由文件來加載你自己的類:

  1. public static function routes($getShared = false)
  2. {
  3. if (! $getShared)
  4. {
  5. return new \App\Libraries\RouteCollection();
  6. }
  7. return self::getSharedInstance('routes');
  8. }

擴展核心類

如果你需要往一個現有的庫里添加一些功能-或許只是添加一兩個方法,重寫這整個庫顯然是沒必要的。這時更好的通常是對其中的類進行擴展。對類進行擴展與替換掉類幾乎相同,除了一點:

  • 類的聲明必須繼承父類。

比如,繼承 RouteCollection 這個原生類,你應該這樣聲明:

  1. class RouteCollection extends \CodeIgniter\Router\RouteCollection
  2. {
  3. }

如果你需要在類中使用構造器來確保子類繼承了父類的構造器:

  1. class RouteCollection implements \CodeIgniter\Router\RouteCollection
  2. {
  3. public function __construct()
  4. {
  5. parent::__construct();
  6. }
  7. }

Tip: 在你自己的類中,所有與父類方法名相同的函數將會覆蓋父類方法,此為”方法覆蓋”. 這樣你就可以充分地改動CodeIgniter 的核心類。

你若擴展了控制器核心類,則需確保你的新類繼承了應用下的控制器類的構造器:

  1. class Home extends App\BaseController {
  2. }
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號