2005/10/21

S2Dao.php5 demo3

ポスト @ 1:43:54 | ,     このエントリーを含むはてなブックマーク

S2Base.PHP5 デモPandN が近くなってきたので期待あげ(そして多分最後の demo 版。次回からは sandbox に置きます)
ref - s2dao.demo3.tar.gz

今回は

  • s2container.php5 を beta 2に上げてみた。
  • s2container.php5 の呼び出しを変えてみた。
  • なんちゃってバインディングに対応してみた。
  • ディレクトリ構成変えてみた。
  • sqlファイルを外に置けるようになった。

ってことで、説明が苦手なのでソースなどを以下。

sql のバインディングと ファイルの外だしは以下のようなものです。

<?php
interface CdDao {

    const BEAN = "CdBean";
    const Array_getSelectCd_ARGS = "id";

    public function List_getSelectCd($id);
}
?>

上のようなインタフェースを書いて、それと同じディレクトリに Daoのクラス名_メソッド名.sql な *.sql ファイルを置いておくと、 そのメソッド名を呼び出した時に sql ファイルを読み込みます。

ファイル構成(demo3)

class/
|-- CdBean.class.php
|-- CdDao.class.php
|-- CdDao_List_getSelectCd.sql
|-- deptDao.dicon
`-- testSQL.sql

CdDao_List_getSelectCd.sqlの中身はこんなにシンプル。

SELECT * FROM CD WHERE ID = /*id*/2

deptDao.diconはいつも通り

<components namespace="dao">

    <component name="dataSource" class="PearDBDataSource">
        <property name="dsn">"mysql://root:pass@localhost/s2con"</property>
    </component>
    <component class="PearDBSqlHandler"/>
    <component name="dbtx" class="PearDBTxInterceptor"/>
    <component name="session" class="DBSessionImpl" />

    <component class="DaoMetaDataFactoryImpl" />
    <component name="interceptor" class="S2DaoInterceptor" />

    <component name="beanCdDao" class="CdDao">
        <aspect>interceptor</aspect>
    </component>

</components>

CdBean.class.phpの中身

<?php
class CdBean {

    const TABLE = "CD";

    〜長いので省略〜
}
?>

んで、呼び出してみる。

<?php
require_once "s2dao.inc.php";
require_once "class/CdBean.class.php";
require_once "class/CdDao.class.php";

$container = S2ContainerFactory::create("class/deptDao.dicon");
$dao = $container->getComponent("beanCdDao");

var_dump($dao->List_getSelectCd(3));

?>

実行してみる。

string(29) "SELECT * FROM CD WHERE ID = 3"
object(ArrayList)#232 (1) {
  ["element:private"]=>
  object(ArrayObject)#233 (1) {
    [0]=>
    object(stdClass)#234 (3) {
      ["ID"]=>
      string(1) "3"
      ["TITLE"]=>
      string(18) "あの木何の木"
      ["CONTENT"]=>
      string(5) "J-POP"
    }
  }
}

また、DBの内容はこんな感じです。

mysql> SELECT * FROM CD;
+----+--------------------+---------+
| ID | TITLE              | CONTENT |
+----+--------------------+---------+
|  1 | HeyJude            | Rock    |
|  2 | Help!              | Rock    |
|  3 | あの木何の木 | J-POP   |
|  4 | gonna rice         | Techno  |
+----+--------------------+---------+

それにしても、いい加減 s2dao の出力結果変えないと.


Trackback

No Trackbacks

Track from Your Website

http://blog.xole.net/trackback/tb.php?id=330

Comment

No Comments

Post Your Comment


*は入力必須です。E-Mailは公開されません。

1 + 2 =