S2Container+S2Dao.PHP5を使ってみる(その3)
さて、出来上がったcommons\dao以下のファイルですが、それらをそのまま使うようにしても良さそうな感じですが、ここはとりあえず
LoginSample\app\modules\Login\entity
LoginSample\app\modules\Login\dao
にそれぞれ*Entity.class.phpと*Dao.class.phpを全てコピーしちゃってそれを利用します。
次はaction、serviceを作っていきます。actionとserviceは同じ画面名を使うことにしたので、同時に生成するようにしてもよさそうなもんですが、とりあえずS2Baseの機能で別々に生成していきます。
画面の遷移をぼんやり頭に浮かべて紙にチョコチョコ書きつつ(適当なサイトのログイン画面を見ながら...)、
- memberLogin
- memberEntry
- memberEntryConfirmation
- memberEntryCompleteTemporary
...と、ついでに適当なコンテンツを捏造してみる。
- viewCart
- selectPaymentMethod
まあこの辺で。ログイン画面で「新規登録」とかすると登録画面→登録内容確認→登録完了という感じで会員登録する、とか。ログインしたらカートの中身を表示する画面に飛ぶ。そんで「レジへ」とかクリックすると支払い方法を選ぶ画面に行く、とか。
ではS2Baseで実際に作ります。
LoginSample以下でphing
phing
→1:actionを選択
→1:Loginを選択
→action nameで"memberLogin"を指定
→confirmで"y"
以上で
- MemberLoginAction.class.php
- MemberLoginAction.inc.php
- MemberLoginAction.dicon
- MemberLoginDto.class.php
- memberLogin.tpl
が出来ました。下記のように出来上がるようにS2Baseを弄ってあります。
- MemberLoginAction.class.php
<?php class MemberLoginAction implements S2Base_Action { private $service; private $dto; public function setService(MemberLoginService $value){ $this->service = $value; } public function getService(){ return $this->service; } public function setDto(MemberLoginDto $value){ $this->dto = $value; } public function getDto(){ return $this->dto; } public function execute(S2Base_Request $request, S2Base_View $view) { } } ?>
- MemberLoginDto.class.php
<?php class MemberLoginDto { } ?>
- MemberLoginAction.dicon
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components namespace="memberLoginAction"> <include path="%S2BASE_PHP5_ROOT%/app/modules/Login/dicon/MemberLoginService.dicon"/> <component name="action" class="MemberLoginAction"> <!-- <aspect></aspect> --> <property name="dto">dto</property> <property name="service">memberLoginService.service</property> </component> <component name="dto" class="MemberLoginDto"> </component> </components>
同様に他のactionも生成したら、続けてserviceを生成します。ここで、phingのserviceコマンドではなく、goyaコマンドを使います。
phing
→8:goyaを選択
→1:Loginを選択
→service nameで"memberLogin"を指定
→use commond daoで"y"
→一覧表示されたDaoから、主として関係のありそうな適当なものを選択。ここではMemberDaoを選択しておきます。
→confirmで"y"
use commond daoにより、先ほどphing gen-daoで生成したcommons\dao以下のファイルを利用します。各serviceを作ってしまったら、とりあえずcommons\dao以下のファイルは一旦削除してしまってよしと。gen-daoで*DaoImplとかも出来てますが要らないので削除。要ればまた直ぐ出来るので。
これで
- MemberLoginService.dicon
- MemberLoginDxo.class.php
- MemberLoginDxoImpl.class.php
- MemberLoginService.class.php
- MemberLoginServiceImpl.class.php
が出来ました。他のserviceも同様に生成します。
- MemberLoginService.dicon
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN" "http://www.seasar.org/dtd/components21.dtd"> <components namespace="memberLoginService"> <include path="%S2BASE_PHP5_ROOT%/app/commons/dicon/dao.dicon"/> <component name="service" class="MemberLoginServiceImplService"> <!-- <aspect></aspect> --> <property name="dxo">dxo</property> <property name="memberDao">memberDao</property> <!-- <property name="memberLogic">memberLogic</property> --> </component> <component name="dxo" class="MemberLoginDxoImpl"> </component> <component name="memberDao" class="MemberDao"> <aspect>dao.interceptor</aspect> </component> <!-- <component name="memberLogic" class="MemberLogicImpl"> <property name="memberDao">memberDao</property> </component> --> </components>
- MemberLoginDxo.class.php
<?php interface MemberLoginDxo { } ?>
- MemberLoginDxoImpl.class.php
<?php class MemberLoginDxoImpl implements MemberLoginDxo { public function __construct(){} } ?>
- MemberLoginService.class.php
<?php interface MemberLoginService { } ?>
- MemberLoginServiceImpl.class.php
<?php class MemberLoginServiceImpl implements MemberLoginService { private $dxo; private $memberDao; // private $memberLogic; public function setDxo(MemberLoginDxo $value = null){ $this->dxo = $value; } public function getDxo(){ return $this->dxo; } public function setMemberDao(MemberDao $value = null){ $this->memberDao = $value; } public function getMemberDao(){ return $this->memberDao; } // public function setMemberLogic(MemberLogic $value = null){ $this->memberLogic = $value; } // public function getMemberLogic(){ return $this->memberLogic; } public function __construct(){} } ?>
これでようやく準備が整ったと。
続く...