Yiiは、必要となるすべてのクラス・ファイルを特定してインクルードするにあたり、
クラスのオートローディング・メカニズム を頼りにします。
Yii は、PSR-4 標準 に準拠した、高性能なクラスのオートローダを提供しています。
このオートローダは、あなたが Yii.php
ファイルをインクルードするときにインストールされます。
補足: 説明を簡単にするため、このセクションではクラスのオートローディングについてのみ話します。しかし、 ここに記述されている内容は、インタフェイスとトレイトのオートローディングにも同様に適用されることに注意してください。
Yii のクラス・オートローダを使用するには、クラスを作成して名前を付けるとき、次の二つの単純なルールに従わなければなりません:
foo\bar\MyClass
)// $className は先頭にバック・スラッシュを持たない完全修飾クラス名
$classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php');
たとえば、クラス名と名前空間が foo\bar\MyClass
であれば、対応するクラス・ファイルのパスの エイリアス は、
@foo/bar/MyClass.php
になります。このエイリアスがファイル・パスとして解決できるようにするためには、@foo
または @foo/bar
のどちらかが、 ルート・エイリアス でなければなりません。
ベーシック・プロジェクト・テンプレート を使用している場合、最上位の名前空間 app
の下にクラスを置くことができ、
そうすると、新しいエイリアスを定義しなくても、Yii によってそれらをオートロードできるようになります。これは @app
が 事前定義されたエイリアス であるためで、app\components\MyClass
のようなクラス名を
今説明したアルゴリズムに従って、クラス・ファイル AppBasePath/components/MyClass.php
であると解決することが出来ます。
アドバンスト・プロジェクト・テンプレート では、各層がそれ自身のルート・エイリアスを持っています。たとえば、
フロントエンド層はルート・エイリアス @frontend
を持ち、バックエンド層のルート・エイリアスは @backend
です。その結果、名前空間 frontend
の下に
フロントエンド・クラスを置き、バックエンド・クラスを backend
の下に置けます。これで、これらのクラスは Yii のオートローダによって
オートロードできるようになります。
独自の名前空間をオートローダに追加するためには、Yii::setAlias() を使って、その名前空間のベース・ディレクトリに対するエイリアスを定義する必要があります。
例えば、path/to/foo
ディレクトリに配置されている foo
名前空間に属するクラスをロードするためには、`Yii::setAlias('@foo', 'path/to/foo') を呼び出します。
Yii のクラス・オートローダは、 クラス・マップ 機能をサポートしており、クラス名を対応するクラス・ファイルのパスにマップできます。 オートローダがクラスをロードするときは、クラスがマップに見つかるかどうかを最初にチェックします。もしあれば、対応する ファイル・パスは、それ以上チェックされることなく、直接インクルードされます。これでクラスのオートローディングを非常に高速化できます。 実際のところ、すべての Yii のコア・クラスは、この方法でオートロードされています。
次の方法で、 Yii::$classMap
に格納されるクラス・マップにクラスを追加できます:
Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php';
クラス・ファイルのパスを指定するのに、 エイリアス を使うことができます。クラスが使用される前にマップが準備できるように、 クラス・マップの設定は ブートストラップ プロセス内でする必要があります。
Yii はパッケージ依存関係マネージャとして Composer を包含しているので、Composer のオートローダもインストールすることをお勧めします。 あなたが独自のオートローダを持つサードパーティ・ライブラリを使用している場合は、 それらもインストールする必要があります。
Yii オートローダを他のオートローダと一緒に使うときは、他のすべてのオートローダがインストールされた 後で 、 Yii.php
ファイルをインクルードする必要があります。これで Yii のオートローダが、任意クラスのオートローディング要求に応答する最初のものになります。
たとえば、次のコードは ベーシック・プロジェクト・テンプレート の
エントリ・スクリプト から抜き出したものです。
最初の行は、Composer のオートローダをインストールしており、二行目は Yii のオートローダをインストールしています。
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
あなたは Yii のオートローダを使わず、Composer のオートローダだけを単独で使用することもできます。しかし、そうすることによって、 あなたのクラスのオートローディングのパフォーマンスは低下し、クラスをオートロード可能にするために Composer が設定したルールに従わなければならなくなります。
情報: Yiiのオートローダを使用したくない場合は、
Yii.php
ファイルのあなた独自のバージョンを作成し、 それを エントリ・スクリプト でインクルードする必要があります。
Yii のオートローダは、 エクステンション クラスのオートロードが可能です。唯一の要件は、
エクステンションがその composer.json
ファイルに正しく autoload
セクションを指定していることです。
autoload
の指定方法の詳細については Composer のドキュメント 参照してください。
Yii のオートローダを使用しない場合でも、まだ Composer のオートローダがエクステンション・クラスをオートロードすることが可能です。
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.