パッケージ

モジュール・サードパーティライブラリ・設定などといった、あらゆる種類のものを含むことができる パッケージは、コードの組織化・再利用・共有のための素晴らしい手段です。 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 を持つことが期待されます。 ブートストラップを使い、パッケージの名前空間を追加します (ご希望の場合、グローバルに)。そして、よりよいパフォーマンスのためにクラスを追加します。

// 名前空間を追加する。オートローダがクラスを見つけられるようにするために必要
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;