パッケージ

モジュール・サードパーティライブラリ・設定などといった、あらゆる種類のものを含むことができる パッケージは、コードの組織化・再利用・共有のための素晴らしい手段です。 app/classes ディレクトリを滅茶苦茶することなくに core を拡張することもできます。 以下で、パッケージとは何であり、何でないのかを明らかにして行きましょう。

パッケージは

一方で

パッケージのインストール

パッケージのインストールは、手動もしくは oil から行えます。手動でインストールするには、ダウンロードしたパッケージをパッケージディレクトリ (デフォルトでは fuel/packages)へ配置してください。

パッケージを利用する際には、パッケージを app/config/config.phpalways_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;