コアシステムクラスの作成
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
コアクラスの置き換え
デフォルトのシステムクラスの代わりに独自のシステムクラスを使用するには、以下を確実に確認してください。
クラスの作成
たとえば、コアシステムクラスの代わりに使用したい新しい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コアを大幅に変更できます。