S2Container+S2Dao.PHP5を使ってみる(その1)

自分の備忘録+まわりの数人の為に、s2.phpを使用した経過を記していきます。


例題っぽい感じで適当なモジュールを作ろうと思うのですが、取りあえず、うちの現在の状況から言って、簡単なログイン画面でも作ってみるのが良いかと思います。


goyaに沿って、画面一つ毎に対応するaction、dto、service、dxoがあり、dbのテーブル一つ毎にentity、daoがある、という形にしたいと思います。必要に応じてlogicやinterceptor等を用意します。service、dxo、logicは全てインターフェースと実装を分けます。


とりあえず、S2Container/S2Dao.PHP5/S2Base.PHP5をさくっとインストールします。S2Baseを使うことで、予めテーブルが出来ていればdaoとentityが自動生成できてしまいます。また、コマンド一発でactionやserviceなどの雛型が出来上がってしまうようなので非常に便利そうです。Smartyを拾ってきて、with Smartyで使います。


ただし、S2Base.PHP5をそのまま使うと、dtodxoのファイルやディレクトリは出来ないようなので、そこはちょこっと改造して、dtodxoなども生成されるようにしておきます。また、S2Base.PHP5のgoyaコマンドではserviceがentityに対応して出来る(entityと同じ名前のserviceが出来る)のですが、action+serviceまでを同じ画面名に対応して作りたいので、それも手を加えておきます。goyaコマンドでは、service名と主に利用するdaoの名前を入力するようにして、serviceからdxoとそのdaoを利用するようにdiconファイルやservice、serviceImpl、dxo、dxoImplを生成するようにしておきます。


と、いうわけで早速やっていきます。
まずS2Baseのフォルダをコピーして、LoginSampleという名前にします。そのフォルダの中で作業していきます。S2Baseはモジュール毎に作っていくので、まずはmoduleコマンドでモジュールを生成します。今回はLoginという名前にしてみます。
ちなみにDOS窓でコマンド入力するのですが、普通のDOS窓は非常に貧弱な機能しかないのでストレスが溜まりまくりです。NYACUSがかなり便利なので個人的にはこれを使ってます。


LoginSampleのフォルダから、
phing→3: moduleを選択→moduke nameを"Login"→confirmで"y"
これだけです。
app\modules\Loginのフォルダと、その中にaction、dao、dicon、dtodxo、entity、logic、viewのフォルダが出来ました。


app\modules\Login.inc.php
がモジュール毎の設定になっているのですが、その中でinclude_pathの追加をしています。dtodxoなどは見に行かない設定なってるので、

    $pwd . '/dto',
    $pwd . '/dxo',
    $pwd . '/logic',

などと追加してしまいます。


ついでに、
LoginSample\app\commons\dicon\auto.dicon
がクラスのautoloadに使われているみたいです。ここにdxoとか書いておかないとDIコンテナ生成時にdxo等を設定ファイルに書いてあると怒られてしまいます。ServiceやDaoのの部分に倣って、

        <initMethod name="addClassPattern">
            <arg>"%S2BASE_PHP5_ROOT%/app/modules/@@MODULE_NAME@@/dxo"</arg>
            <arg>".+DxoImpl"</arg>
        </initMethod>
		<initMethod name="addClassPattern">
            <arg>"%S2BASE_PHP5_ROOT%/app/modules/@@MODULE_NAME@@/logic"</arg>
            <arg>".+LogicImpl"</arg>
        </initMethod>
		<initMethod name="addClassPattern">
            <arg>"%S2BASE_PHP5_ROOT%/app/modules/@@MODULE_NAME@@/dto"</arg>
            <arg>".+Dto"</arg>
        </initMethod>


と追加してしまいます。どうやらこれで大丈夫みたいです。


続く...