パッケージ
モジュール・サードパーティライブラリ・設定などといった、あらゆる種類のものを含むことができる パッケージは、コードの組織化・再利用・共有のための素晴らしい手段です。 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 を持つことが期待されます。 ブートストラップを使い、パッケージの名前空間を追加します (ご希望の場合、グローバルに)。そして、よりよいパフォーマンスのためにクラスを追加します。
// Add namespace, necessary if you want the autoloader to be able to find classes
Autoloader::add_namespace('Mypackage', __DIR__.'/classes/');
// Add as core namespace
Autoloader::add_core_namespace('Mypackage');
// Add as core namespace (classes are aliased to global, thus useable without namespace prefix)
// Set the second argument to true to prefix and be able to overwrite core classes
Autoloader::add_core_namespace('Mypackage', true);
// And add the classes, this is useful for:
// - optimization: no path searching is necessary
// - it's required to be able to use as a core namespace
// - if you want to break the autoloader's path search rules
Autoloader::add_classes(array(
'Mypackage\\Classname' => __DIR__.'/classes/classname.php',
'Mypackage\\Anotherclass' => __DIR__.'/classes/anotherclass.php',
));
クラスの準備が整ったら、それらを使用することができます。
Note: パッケージの名前空間がグローバルにエイリアスされていない場合、名前空間を指定する必要があります:
// グローバルにエイリアスされている場合
$instance = new Myclass;
// グローバルにエイリアスされていない場合
$instance = new Mynamespace\Myclass;