PathInitializer

PathInitializerは、ficusで利用するソースコードへのパスなどの設定を簡単に行うためのクラスです。

ficusを利用するアプリケーションでは、次のようなFicus_FicusPathInitializerを利用するクラスを書く必要があります。

設定ファイルパスの設定

Ficus_FicusPathInitializer::setConfigDirectory

Ficus_PropertyFileReaderなどが利用する設定ファイルのルートディレクトリです。

ライブラリパスの設定

Ficus_FicusPathInitializer::setLibraryDirectory

Ficusが利用しているライブラリへのパスです。

ログ出力パスの設定

Ficus_FicusPathInitializer::setLoggerDirectory

Ficus_Loggerがログを出力するパスです。

パスの追加

Ficus_FicusPathInitializer::addPath

include_dirにパスを追加します。

オートクラスローダーへのパスの追加

Ficus_AutoClassLoader::add

パッケージ名(クラスのプレフィックス)とルートパスを渡すとクラスを自動でロードしてくれるようになります。

autoloadの追加

FicusAutoLoad::add

S2DaoやSeasar、ClassLoaderAutoLoadを渡すと、そこからロードしてくれます。

Ficus_FicusPathInitializer::addPath($core, "src");
Ficus_FicusPathInitializer::addAutoLoadPath($core, "Editor_");

サンプル

この例では、Ficusの基本的なディレクトリ構成に従っています。 クラス名は何でもかまいませんが、ここではパッケージ名を「Sample」とします。

<?php
class Sample_SamplePathInitializer {
    public static function initialize($base){
        require_once("$base/lib/ficus/FicusPathInitializer.php");
        Ficus_FicusPathInitializer::setConfigDirectory(dirname(__FILE__) . "/../conf/");
        Ficus_FicusPathInitializer::setLibraryDirectory(dirname(__FILE__) . "/../lib/");
        Ficus_FicusPathInitializer::setLoggerDirectory(dirname(__FILE__) . "/../logs/");

        Ficus_FicusPathInitializer::addPath(dirname(__FILE__) . "/../src/");
        Ficus_FicusPathInitializer::setUp();
        //ここから、
        //require_once("ficus/lang/Assert.php");
        //などファイルが読み込めます。
        
        $base = Ficus_Dir::createInstance(__FILE__, "src");

        $core = new Ficus_ClassPathElement($base->add("src"));
        Ficus_FicusPathInitializer::addPath($core, "src");

        Ficus_AutoClassLoader::add(
            new Ficus_ClassPathElement($base->add("src")), "Editor");
        Ficus_AutoClassLoader::add(
            new Ficus_ClassPathElement($base->add("lib/ficus")), "Ficus");
                            
        Ficus_AutoLoad::add(new Ficus_S2DaoAutoLoad());
        Ficus_AutoLoad::add(new Ficus_S2AnAAutoLoad());
        Ficus_AutoLoad::add(new Ficus_ClassLoaderAutoLoad());
    }
}
?>

そしてこのクラスを、アプリケーションのエントリポイントとなるPHPファイルで利用します。

$base = dirname(dirname(__FILE__));
//initialize include_path and so on
require_once("$base/src/EditorPathInitializer.php");
Editor_EditorPathInitializer::initialize($base);

この呼び出しのあとは、次のようにファイルを読み込むことが出来ます。

//and so we can read source.
require_once("ficus/config/PropertyRegister.php");
Ficus_PropertyRegister::regist("common");

後は、Ficusのクラスを自由に利用することが出来ます。
たとえば、beanを利用したい場合は、

require_once("ficus/beans/Bean.php");
とかけます。ただ、AutoLoadしていますので、いきなり
class Sample_Bean extends Ficus_Bean
としてもエラーにはなりません。

上記PathInitializerのコードは、次のようなアプリケーションを想定しています。

-sample
 |-htdocs ------(ドキュメントルート)
 | |-index.php -(アプリケーションのエントリポイント)
 |-src ---------(アプリケーションのソースコード)
 |-lib ---------(ライブラリのパス、Ficus及びFicusの依存ライブラリ
 |                アプリケーションのライブラリを置く場所)
 |-conf --------(設定ファイルを置く場所)
 |-logs --------(ログディレクトリ)

srcに置いたファイルは

src/models/UserEntity.php
であれば
require_once("models/UsersEntity.php");
と参照できます。

libに置いたファイルは

lib/ficus/lang/ClassPath.php
であれば
require_once("ficus/lang/ClassPath.php");
です。

Ficusでは、基本的にライブラリをSystemグローバルに置かない設計をしています。
追加のライブラリは、libディレクトリに入れるといいでしょう。
後述のphingを用いれば、ライブラリの依存関係を自動で解決できます。