<< Piece_Unityユーザーズマニュアル

プラグイン

プラグインは、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は使用されないことに注意してください。

例えば、プラグインディレクトリが下記のように設定されているとします。

  1. ../webapp/lib
  2. /path/to/another/dir
  3. 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のインクルードが実行されます。

  1. ../webapp/lib/Foo.php
  2. /path/to/another/dir/Foo.php
  3. php_dir/Piece/Unity/Plugin/Foo.php

インクルードはプラグインディレクトリの優先順位に従って、下記のいずれかの条件を満たすまで実行されます。

  1. Foo.phpの読み込みが完了し、それが正しいプラグイン(Piece_Unity_Plugin_FooクラスがPiece_Unity_Plugin_Commonの派生クラスである)場合
  2. 上記のすべてのプラグインディレクトリが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();
?>

これらの設定によって、最終的なプラグインディレクトリは下記のようになります。

  1. ../webapp/lib
  2. /path/to/another/dir
  3. php_dir/Piece/Unity/Plugin

php_dir/Piece/Unity/Pluginは常に最後に設定されます。また、php_dir/Piece/Unity/Pluginは自分で設定する必要はありません。


<< Piece_Unityユーザーズマニュアル

ユーザコメント

Error: Failed to load processor AddComment
No macro or processor named 'AddComment' found