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(){}

}
?>

これでようやく準備が整ったと。

続く...