コアシステムクラスの作成

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.php**でroutesサービスを追加して、代わりにあなたのクラスを読み込むようにします。

<?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));
    }

    // ...
}

コアクラスの拡張

既存のライブラリに機能を追加するだけの場合(メソッドを1つまたは2つ追加するなど)、ライブラリ全体を作り直すのは過剰です。この場合、クラスを拡張する方が優れています。クラスの拡張はコアクラスの置き換えとほとんど同じですが、1つの例外があります。

  • クラス宣言は親クラスを拡張する必要があります。

たとえば、ネイティブの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コアを大幅に変更できます。