プラグイン
プラグインは、Piece_Unityやアプリケーションの機能を拡張するクラスです。Piece_Unityの機能の大部分はプラグインによって実装されています。ユーザは、プラグインの拡張ポイントと設定ポイントによって、プラグインの機能や振る舞いを変更することができます。実際のところ、Piece_Unity設定ファイル(piece-unity-config.yaml)はプラグインの設定にすぎません。
拡張ポイント
拡張ポイントは、プラグインの機能を拡張するポイントです。拡張ポイントに他のプラグインを設定することで、プラグインの機能を拡張することができます。例えば、Controllerプラグイン?が持つ拡張ポイントdispatcher?には、リクエストを処理するディスパッチャが設定されます。拡張ポイントは、設定ファイルやダイナミックコンフィグレーションによって設定することができます。下記はdispatcher?にステートレスなディスパッチャDispatcher_Simpleプラグイン?を設定する例です。
- name: Cotroller
point:
- name: dispatcher
type: extension
value: Dispatcher_Simple
設定ポイント
設定ポイントは、プラグインの機能を設定するポイントです。設定値には、文字列、ブーリアン値、配列を使うことができます。下記はRenderer_Flexyプラグイン?の設定ポイントtemplateExtension?にHTMLテンプレートの拡張子.tmplを設定する例です。
- name: Renderer_Flexy
point:
- name: templateExtension
type: configuration
value: .tmpl
プラグインディレクトリ
プラグインディレクトリとは、Piece_Unityカーネルがプラグインの配置先として認識しているディレクトリのことです。プラグインの検索にはプラグインディレクトリのみが使用されます。include_pathは使用されないことに注意してください。
例えば、プラグインディレクトリが下記のように設定されているとします。
- ../webapp/lib
- /path/to/another/dir
- php_dir/Piece/Unity/Plugin
この場合、[source:trunk/Piece/Unity/Plugin/Common.php Piece_Unity_Plugin_Common]::getExtension()あるいは[source:trunk/Piece/Unity/Plugin/Factory.php Piece_Unity_Plugin_Factory]::factory()からFooプラグインが要求されると、上記のディレクトリ設定に基づいてFoo.phpのインクルードが実行されます。
- ../webapp/lib/Foo.php
- /path/to/another/dir/Foo.php
- php_dir/Piece/Unity/Plugin/Foo.php
インクルードはプラグインディレクトリの優先順位に従って、下記のいずれかの条件を満たすまで実行されます。
- Foo.phpの読み込みが完了し、それが正しいプラグイン(Piece_Unity_Plugin_FooクラスがPiece_Unity_Plugin_Commonの派生クラスである)場合
- 上記のすべてのプラグインディレクトリが1の条件を満たさない場合
プラグインディレクトリの設定
プラグインディレクトリにはデフォルトでphp_dir/Piece/Unity/Pluginが設定されています。ユーザは、アプリケーション毎、エントリポイント毎、あるいは任意のタイミングで、ひとつ以上のプラグインディレクトリを設定できます。
独自のプラグインディレクトリを設定するには、Configurator_Pluginプラグイン?が提供する設定ポイントpluginDirectories?を使います。プラグインディレクトリの優先順位は見たまま(配列)の順になります。
- name: Configurator_Plugin
point:
- name: pluginDirectories
type: configuration
value:
- ../webapp/lib
- /path/to/another/dir
もちろん、ダイナミックコンフィグレーションを使った場合でも、上記と同様の設定を行うことができます。下記はエントリポイントによるプラグインディレクトリの設定例です。
<?php ... $base = dirname(__FILE__) . '/../webapp'; $unity = &new Piece_Unity("$base/config", "$base/cache"); $unity->setConfiguration('Configurator_Plugin', 'pluginDirectories', array("$base/lib",'/path/to/another/dir')); ... $unity->dispatch(); ?>
これらの設定によって、最終的なプラグインディレクトリは下記のようになります。
- ../webapp/lib
- /path/to/another/dir
- php_dir/Piece/Unity/Plugin
php_dir/Piece/Unity/Pluginは常に最後に設定されます。また、php_dir/Piece/Unity/Pluginは自分で設定する必要はありません。
ユーザコメント
