サードパーティライブラリを使う

Yii は、より一層 Yii の機能性を拡張するために、容易にサードパーティライブラリを統合できるよう、入念に設計されています。 プロジェクトでサードパーティライブラリを使用する場合、開発者は、たびたびクラスの名前付けやファイルのインクルードに関する問題に直面します。 全ての Yii クラスは、C から始まるので、クラスの命名問題はそれほど起こらないでしょう。 また、Yii はクラスファイルのインクルードを行うために SPL autoload を使用しているので、他のライブラリがクラスファイルをインクルードするために、同じオートローディング機能か PHP インクルードパスを使っている場合には、お互いにうまく動作することが出来ます。

以下では、例として、Yii アプリケーションで Zend framework の、Zend_Search_Lucene コンポーネントを使用する方法を解説します。

まず、protectedアプリケーションベースディレクトリ と仮定し、Zend framework リリースファイルを protected/vendors ディレクトリ以下に展開します。 protected/vendors/Zend/Search/Lucene.php ファイルがある事を確認してください。

次に、コントローラクラスファイルの最初に、下記の行を追加します:

Yii::import('application.vendors.*');
require_once('Zend/Search/Lucene.php');

上記のコードで、クラスファイル Lucene.php をインクルードします。 相対パスを使用するため、正しくファイルを見つけられるように PHP インクルードパスを変える必要があります。 これは、require_once の前に、Yii::import をコールする事で行われます。

一旦上記のセットアップが完了すれば、下記のように、コントローラアクション中で Lucene クラスを使用できます。

$lucene=new Zend_Search_Lucene($pathOfIndex);
$hits=$lucene->find(strtolower($keyword));

名前空間を持つサードパーティライブラリを使う

PSR-0 に準拠する名前空間を持ったライブラリ (例えば Zend Framework 2 や Symfony2) を使うためには、そのルートをパスエイリアスとして登録する必要があります。

例として、Imagine を使いましょう。 Imagine ディレクトリを protected/vendors の下に置いたとすると、次のようにすれば Imagin を使うことが出来るようになります。

Yii::setPathOfAlias('Imagine',Yii::getPathOfAlias('application.vendors.Imagine'));
 
// 次に Imagine のガイドにある標準的なコード
// $imagine = new Imagine\Gd\Imagine();
// 等々

上記のコードにおいて、エイリアスの名前の定義は、ライブラリで使用される名前空間の最初の部分と一致させなければなりません。

Yii をサードパーティのシステムで使う

また、Yii は、WordPress, Joomla などの既存のサードパーティシステムの開発や拡張をサポートするための自己充足的なライブラリとして使用することも出来ます。 そうするためには、次のコードをサードパーティシステムのブートストラップコードに含めます。

require_once('path/to/yii.php');
Yii::createWebApplication('path/to/config.php');

上記のコードは典型的な Yii アプリケーションで使われるブートストラップコードとほとんど同一ですが、ただ一点、ウェブアプリケーションのインスタンスを作成した後に、run() メソッドを呼ばないという違いがあります。

これによって、サードパーティの拡張機能を開発するときに、Yii によって提供されるほとんどの機能を使用することが可能になります。 例えば、Yii::app() を使ってアプリケーションインスタンスにアクセス出来ます。 また、DAO やアクティブレコードといったデータベース機能を使うことも出来ます。 さらに、モデルとバリデーションの機能も使うことが出来る、等々です。

$Id$