Doctrineエクステンションは任意のプロジェクトに入れて有効にできる再利用可能なDoctrineエクステンションを作成する方法です。エクステンションはコードの命名や、オートロードなどDoctrineの標準に従う単なるコードです。
エクステンションを使うには最初にどこにエクステンションがあるのかDoctrineにわかるように設定しなければなりません:
Doctrine_Core::setExtensionsPath('/path/to/extensions');
SVNから既存のエクステンションをチェックアウトしてみましょう。ソートの上げ下げを提供するモデルのビヘイビアを搭載するSortableエクステンションを見てみましょう。
$ svn co http://svn.doctrine-project.org/extensions/Sortable/branches/1.2-1.0/ /path/to/extensions/Sortable
/path/to/extensions/Sortableを見てみると次のようなディレクトリ構造を見ることになります:
Sortable/
lib/
Doctrine/
Template/
Listener/
Sortable.php
Sortable.php
tests/
run.php
Template/
SortableTestCase.php
このエクステンションがあなたのマシンで動くことを確認するためにエクステンションのテストスイートを実行します。必要なのはDOCTRINE_DIR環境変数をセットすることです。
$ export DOCTRINE_DIR=/path/to/doctrine
上記のDoctrineへのパスはlibフォルダーではなくメインフォルダーへのパスでなければなりません。テストを実行するにはDoctrineを含めたtestsディレクトリにアクセスできなければなりません。
Sortableエクステンションのテストを実行することが可能です:
$ cd /path/to/extensions/Sortable/tests
$ php run.php
次のようなテストが成功したことを示すテストの出力が表示されます:
Doctrine Unit Tests
===================
Doctrine_Template_Sortable_TestCase.............................................passed
Tested: 1 test cases.
Successes: 26 passes.
Failures: 0 fails.
Number of new Failures: 0
Number of fixed Failures: 0
Tests ran in 1 seconds and used 13024.9414062 KB of memory
プロジェクトでエクステンションを使いたい場合Doctrineでエクステンションを登録しエクステンションのオートロードメカニズムをセットアップする必要があります。
最初にエクステンションのオートロードをセットアップしましょう。
// bootstrap.php
// ...
spl_autoload_register(array('Doctrine', 'extensionsAutoload'));
これでエクステンションを登録したのでエクステンション内部のクラスがオートロードされます。
$manager->registerExtension('Sortable');
異なる場所からエクステンションを登録する必要がある場合、registerExtension()メソッドの2番目の引数でエクステンションディレクトリへのフルパスを指定します。