ログ日記

作業ログと日記とメモ

Zend Framework

消えたorz

書いてる途中にブラウザが落ちた・・。
がんがって思い出して書こうorz


コメントを貰ったからZend FrameworkをDLしてみた。
バージョン1.0.0が出てるのを知らなかったorz
前にちょこっと読んでいて手元にあるやつは0.1.3だから中身は全然違うようだ。

wc -l `find . -name "*.php"` | tail -n

とかやると気が遠くなるので
http://framework.zend.com/manual/ja/index.html
この辺とかを見つつ。



やっぱり書き直すのはしんどいのでまた後日。。
Zend Frameworkを使ってデータベースを利用するページ作成!みたいなサイトは無いんかね・・。


http://www.itmedia.co.jp/enterprise/articles/0703/05/news013_3.html
こういうのはちょこちょこあるみたいだけど、綺麗に書くための説明、みたいなのはあるのかなぁ・・。



ちなみに現在迷い中のコードはこんなの

<?php
...
function execCancel(Array &$items, OrMapper_Cancel $cancelDao, $description){
    $cancel = $cancelDao->createVo();
    $cancel->description = $description;

    $cancelDao->save($cancel);
    $cancelId = $cancelDao->currval(); 
    // idを取得して※で設定するためにこのスコープでsave()が必要

    foreach ($items as &$item){
        $item->cancelId = $cancelId; // ※
        $item->status = 'cancel';
    }
}

リレーションを

cancel <--- cancel_data ---> item

にせずに

cancel <--- item

にしたのは妥協したからなんだけど(というかわざわざ変更した)、プログラムのことを考えたらやっぱり妥協せずにきっちりDB作った方がいいのかねぇ。。

そうすると引数をvoだけにして、関数の外でdaoを使ったvo取得〜保存がすんなり出来そうだ。


まぁアクションクラスで

<?php
class CancelAction
{
    public $itemIds;
    public $description;

    public function execute(OrMapper_Item $itemDao){
        $itemDao->begin();
        try {
            $cancel = Cancel::create($description);
        }catch (Exception $e){
            $itemDao->abort();
            return 'error';
        }

        $items = $itemDao->getVos($this->itemIds);
        try {
            Cancel::execCancel($items, $cancel, $this->description);
        }catch (Exception $e){
            $itemDao->abort();
            return 'error';
        }
        $itemDao->commit();
    }

}

とやってもいいんだけど、この流れは固定だからアクションクラスに書くのはなぁ・・かと言ってこのためにクラスを作るほどでもない。っていう・・まぁそんなに重要じゃない悩みなのだけれど。