ファイルの自動読み込み

すべてのアプリケーションは、さまざまな場所に多数のクラスで構成されています。フレームワークはコア機能のためのクラスを提供します。アプリケーションには、動作させるための多数のライブラリ、モデル、その他のエンティティがあります。プロジェクトで使用しているサードパーティのクラスもあるかもしれません。すべてのファイルがどこにあるかを追跡し、その場所を `requires()` の形でファイルにハードコーディングするのは、非常に面倒でエラーが発生しやすい作業です。そこで、オートローダーの出番です。

CodeIgniter4 オートローダー

CodeIgniter は、非常に柔軟なオートローダーを提供しており、わずかな設定で使用できます。PSR-4 オートローディングディレクトリ構造に準拠した個々の名前空間付きクラスを見つけることができます。

オートローダーは単独で優れた機能を発揮しますが、必要に応じて Composer などの他のオートローダーや、独自のカスタムオートローダーとも連携できます。 `spl_autoload_register` を介してすべて登録されているため、順番に動作し、互いに干渉することはありません。

オートローダーは常にアクティブであり、フレームワークの実行開始時に `spl_autoload_register()` に登録されます。

重要

ファイル名の大文字小文字には常に注意する必要があります。多くの開発者は、Windows や macOS の大文字と小文字を区別しないファイルシステムで開発を行っています。ただし、ほとんどのサーバー環境では、大文字と小文字を区別するファイルシステムが使用されています。ファイル名の大文字小文字が正しくない場合、オートローダーはサーバー上のファイルを見つけることができません。

設定

初期設定は **app/Config/Autoload.php** で行います。このファイルには、クラスマップ用と PSR-4 互換の名前空間用の 2 つの主要な配列が含まれています。

名前空間

クラスを整理するための推奨される方法は、アプリケーションのファイルに 1 つ以上の名前空間を作成することです。これは、ビジネスロジック関連のクラス、エンティティークラスなどにとって最も重要です。設定ファイルの `$psr4` 配列を使用すると、名前空間を、それらのクラスが見つかるディレクトリにマッピングできます。

<?php

namespace Config;

use CodeIgniter\Config\AutoloadConfig;

class Autoload extends AutoloadConfig
{
    // ...
    public $psr4 = [
        APP_NAMESPACE => APPPATH, // For custom app namespace
        'Config'      => APPPATH . 'Config',
    ];

    // ...
}

各行のキーは名前空間自体です。末尾にバックスラッシュは必要ありません。値は、クラスが見つかるディレクトリの場所です。

名前空間の確認

`spark namespaces` コマンドで名前空間の設定を確認できます。

php spark namespaces

アプリケーション名前空間

デフォルトでは、アプリケーションディレクトリは `App` 名前空間に設定されています。アプリケーションディレクトリのコントローラー、ライブラリ、またはモデルは名前空間を設定する必要があり、`App` 名前空間の下にあります。

この名前空間は、**app/Config/Constants.php** ファイルを編集し、`APP_NAMESPACE` 設定の下に新しい名前空間値を設定することで変更できます。

defined('APP_NAMESPACE') || define('APP_NAMESPACE', 'App');

現在の名前空間を参照している既存のファイルは変更する必要があります。

重要

設定ファイルは、予想される `App\Config` ではなく、`Config` 名前空間に設定されています。これにより、アプリケーションの名前空間が変更された場合でも、コアシステムファイルは常に設定ファイルを見つけることができます。

クラスマップ

クラスマップは CodeIgniter によって広く使用されており、余分な `is_file()` 呼び出しでファイルシステムにアクセスしないことで、システムから最大限のパフォーマンスを引き出します。クラスマップを使用して、名前空間のないサードパーティライブラリにリンクできます。

<?php

namespace Config;

use CodeIgniter\Config\AutoloadConfig;

class Autoload extends AutoloadConfig
{
    // ...
    public $classmap = [
        'Markdown' => APPPATH . 'ThirdParty/markdown.php',
    ];

    // ...
}

各行のキーは、見つけたいクラスの名前です。値は、そのクラスがあるパスです。

Composer サポート

Composer サポートはデフォルトで自動的に初期化されます。デフォルトでは、`ROOTPATH . 'vendor/autoload.php'` にある Composer のオートロードファイルを探します。何らかの理由でそのファイルの場所を変更する必要がある場合は、**app/Config/Constants.php** で定義されている値を変更できます。

注記

CodeIgniter と Composer の両方で同じ名前空間が定義されている場合、CodeIgniter のオートローダーが最初にファイルを見つける機会を得ます。