코어 시스템 클래스 만들기

CodeIgniter가 실행될 때마다 코어 프레임워크의 일부로 자동으로 초기화되는 여러 베이스 클래스가 있습니다. 하지만 코어 시스템 클래스 중 어떤 것이든 자신만의 버전으로 교체하거나 코어 버전을 확장하는 것도 가능합니다.

대부분의 사용자는 이 작업을 할 필요가 없지만, CodeIgniter 코어를 크게 수정하려는 사람들을 위해 교체하거나 확장하는 옵션이 존재합니다.

중요

코어 시스템 클래스를 수정하면 많은 영향을 미치므로, 시도하기 전에 자신이 무엇을 하는지 반드시 이해하고 있어야 합니다.

시스템 클래스 목록

다음은 CodeIgniter가 실행될 때마다 호출되는 코어 시스템 클래스 목록입니다:

  • CodeIgniter\Autoloader\Autoloader

  • CodeIgniter\Autoloader\FileLocator

  • CodeIgniter\Cache\CacheFactory

  • CodeIgniter\Cache\Handlers\BaseHandler

  • CodeIgniter\Cache\Handlers\FileHandler

  • CodeIgniter\Cache\ResponseCache

  • CodeIgniter\CodeIgniter

  • CodeIgniter\Config\BaseService

  • CodeIgniter\Config\DotEnv

  • CodeIgniter\Config\Factories

  • CodeIgniter\Config\Services

  • CodeIgniter\Controller

  • CodeIgniter\Cookie\Cookie

  • CodeIgniter\Cookie\CookieStore

  • CodeIgniter\Debug\Exceptions

  • CodeIgniter\Debug\Timer

  • CodeIgniter\Events\Events

  • CodeIgniter\Filters\Filters

  • CodeIgniter\HTTP\CLIRequest (커맨드 라인에서 실행 시에만)

  • CodeIgniter\HTTP\ContentSecurityPolicy

  • CodeIgniter\HTTP\Header

  • CodeIgniter\HTTP\IncomingRequest (HTTP로 실행 시에만)

  • CodeIgniter\HTTP\Message

  • CodeIgniter\HTTP\OutgoingRequest

  • CodeIgniter\HTTP\Request

  • CodeIgniter\HTTP\Response

  • CodeIgniter\HTTP\SiteURI

  • CodeIgniter\HTTP\SiteURIFactory

  • CodeIgniter\HTTP\URI

  • CodeIgniter\HTTP\UserAgent (HTTP로 실행 시에만)

  • CodeIgniter\Log\Logger

  • CodeIgniter\Log\Handlers\BaseHandler

  • CodeIgniter\Log\Handlers\FileHandler

  • CodeIgniter\Router\RouteCollection

  • CodeIgniter\Router\Router

  • CodeIgniter\Superglobals

  • CodeIgniter\View\View

코어 클래스 교체

기본 클래스 대신 직접 만든 시스템 클래스를 사용하려면 다음을 확인하세요:

  1. 자동 로더가 클래스를 찾을 수 있어야 하고,

  2. 새 클래스가 적절한 인터페이스를 구현해야 하며,

  3. 코어 클래스 대신 클래스를 로드하도록 적절한 서비스를 수정해야 합니다.

클래스 만들기

예를 들어, 코어 시스템 클래스 대신 사용하려는 새 App\Libraries\RouteCollection 클래스가 있다면 다음과 같이 클래스를 만듭니다:

<?php

namespace App\Libraries;

use CodeIgniter\Router\RouteCollectionInterface;

class RouteCollection implements RouteCollectionInterface
{
    // ...
}

서비스 추가

그런 다음 app/Config/Services.phproutes 서비스를 추가하여 클래스를 대신 로드하도록 합니다:

<?php

namespace Config;

use CodeIgniter\Config\BaseService;

class Services extends BaseService
{
    public static function routes(bool $getShared = true)
    {
        if ($getShared) {
            return static::getSharedInstance('routes');
        }

        return new \App\Libraries\RouteCollection(static::locator(), config(Modules::class), config(Routing::class));
    }

    // ...
}

코어 클래스 확장

기존 라이브러리에 메서드 한두 개를 추가하는 등 일부 기능만 추가하면 된다면, 라이브러리 전체를 다시 만드는 것은 과도합니다. 이 경우에는 단순히 클래스를 확장하는 것이 좋습니다. 클래스 확장은 코어 클래스 교체와 거의 동일하지만 한 가지 예외가 있습니다:

  • 클래스 선언이 부모 클래스를 확장해야 합니다.

예를 들어, 기본 RouteCollection 클래스를 확장하려면 다음과 같이 클래스를 선언합니다:

<?php

namespace App\Libraries;

use CodeIgniter\Router\RouteCollection as BaseRouteCollection;

class RouteCollection extends BaseRouteCollection
{
    // ...
}

클래스에서 생성자를 사용해야 하는 경우 반드시 부모 생성자를 확장해야 합니다:

<?php

namespace App\Libraries;

use CodeIgniter\Router\RouteCollection as BaseRouteCollection;

class RouteCollection extends BaseRouteCollection
{
    public function __construct()
    {
        parent::__construct();

        // your code here
    }
}

팁: 클래스에서 부모 클래스의 메서드와 동일한 이름의 함수는 기본 것 대신 사용됩니다 (이를 “메서드 오버라이딩”이라고 합니다). 이를 통해 CodeIgniter 코어를 크게 수정할 수 있습니다.