1

最近、ここで紹介した方法を使用して、Doctrine2をZFアプリに統合しました。

http://www.zendcasts.com/unit-testing-doctrine-2-entities/2011/02/

私はそれが機能する方法が本当に好きです、しかし私はこれが私のモデルとマッパーを持っていた方法にどのように影響するかについて少し混乱しています。

混乱を例で説明しましょう、

ZendCastで与えられた例のように、ユーザーエンティティと購入があるとしましょう

現在、Doctrineが使用するこれらのエンティティがあります

/library/ZC/Entity
    User.php
    Purchase.php

私が持っていた前に

application/models/
    User.php (Application_Model_User)
    Purchase.php (Application_Model_Purchase)

application / models /のクラスでは、エンティティに作用する関数を記述していました(Fatモデルのシンコントローラーの原則)。たとえば、ユーザーにメールを送信する場合は、Application_Model_UserにsendMailという名前のメソッドを作成します。

/ library / ZC / Entity内のファイルにメソッドを追加できるかどうか、またはDoctrineがデータベースを管理するためにそれらのファイルを使用するため、それがまったく良い考えかどうかはわかりません。

むしろ別のモデルファイルがあり、複数のモデルで機能するマッパーファイルもありました。たとえば、すべての非アクティブなユーザーに電子メールを送信する場合は、メソッドemailInactiveUsersをApplication_Model_UserMapperに作成します。

私は今それをどのように行うでしょうか?

私も少しグーグルして、これを見つけました:

http://net.tutsplus.com/tutorials/php/zend-framework-from-scratch-models-and-integrating-doctrine-orm/

それは言う

データベースからモデルを非常に迅速に作成するDoctrine_Cliと呼ばれるスキャフォールディングツール

ただし、コマンド「generate-models-db」がscripts/doctrine.phpファイルに存在しません。これがDoctrineがバージョン2でサポートを停止したものなのかどうかはわかりません。

4

1 に答える 1

2

Doctrine によって管理されていないモデルにメソッドとプロパティを追加しても問題ありません。マッパーに関しては、Doctrine では必要ありません。Doctrine はすでにマッピングを処理しており (例: Entity クラスの Annotations を介して)、(複雑な) クエリの場合は EntityManager/Repositories を使用します。

emailInactiveUsers()EntityManager にアクセスできる Service に配置します。たとえば、次のようになります。

class UserMailService
{
    private $em;

    // Inject EntityManager, e.g. via setEntityManager() or __construct()

    public function emailInactiveUsers()
    {
        $mail = new \Zend_Mail();
        $users = $this->em->getRepository('User')->findBy(array('isActive' => false));
        foreach ($users as $user) {
            $mail->addTo($user->getEmail());
        }
        // And so on...
    }
}

私の意見のようなものsendMail()は、ユーザーエンティティで動作し、モデルと結合されるべきではないメーラーへの依存を必要とするため、サービスに属します。

ユーザーが何かを行う場合、それはモデルに属します。ユーザーに何かが作用した場合-あなたの場合、ユーザーから電子メールアドレスを取得して電子メールを送信するメーラー-はそうではありません。

于 2012-06-11T06:31:15.733 に答える