パッケージ
モジュール・サードパーティライブラリ・設定などといった、あらゆる種類のものを含むことができる パッケージは、コードの組織化・再利用・共有のための素晴らしい手段です。 app/classes ディレクトリを滅茶苦茶することなくに core を拡張することもできます。 以下で、パッケージとは何であり、何でないのかを明らかにして行きましょう。
パッケージは
- コードをまとめ、
- サードパーティライブラリを維持するための場所を提供し、
- 誰かが書いたコードを滅茶苦茶にすることなく拡張すること実現し、
- core を目茶目茶にすることなく fuel の拡張をするための場所です。
一方で
- パッケージは URL をマップすることはなく、
- また、 HMVC リクエストからアプローチすることはできません。
パッケージのインストール
パッケージのインストールは、手動もしくは oil から行えます。手動でインストールするには、ダウンロードしたパッケージをパッケージディレクトリ (デフォルトでは fuel/packages)へ配置してください。
パッケージを利用する際には、パッケージを app/config/config.php
の always_load
へ追加するか、
もしくは Package::load() を呼び出す必要があります。
パッケージの作成
あなたが何をしているのかを他の人が理解しやすくするための、ベストなパッケージ構造:
/packages
/package
/bootstrap.php
/classes
/your.php
/classes.php
/here.php
/config
/packageconfig.php
/and_so_on
すべてのパッケージはパッケージのベースに bootstrap.php を持つことが期待されます。 ブートストラップを使い、パッケージの名前空間を追加します (ご希望の場合、グローバルに)。そして、よりよいパフォーマンスのためにクラスを追加します。
// 名前空間を追加する。オートローダがクラスを見つけられるようにするために必要
Autoloader::add_namespace('Mypackage', __DIR__.'/classes/');
// コア名前空間として追加する
Autoloader::add_core_namespace('Mypackage');
// コア名前空間 (クラスはグローバルにエイリアスが作成され、名前空間のプレフィックスなしで利用できる) として追加する
// 第2引数を true にセットすると、コアクラスを上書きできる
Autoloader::add_core_namespace('Mypackage', true);
// そしてクラスを追加する、これは以下に役立つ:
// - 最適化: パス検索が不要に
// - コア名前空間として使用できるようにする必要がある場合
// - オートローダのパス検索ルールに反する場合
Autoloader::add_classes(array(
'Mypackage\\Classname' => __DIR__.'/classes/classname.php',
'Mypackage\\Anotherclass' => __DIR__.'/classes/anotherclass.php',
));
クラスの準備が整ったら、それらを使用することができます。
Note: パッケージの名前空間がグローバルにエイリアスされていない場合、名前空間を指定する必要があります:
// グローバルにエイリアスされている場合
$instance = new Myclass;
// グローバルにエイリアスされていない場合
$instance = new Mynamespace\Myclass;