0

Doctrine 2を使用するZendフレームワーク2で、コントローラーアクションで動的エンティティ名を使用するにはどうすればよいですか?

たとえば。

public function indexAction()
    {
        return new ViewModel(array(
            'albums' => $this->getEntityManager()->getRepository('Album\Entity\[dynamic_entity_name]')->findAll() 
        ));
    }

また、そもそも、ここでの私の場合のように、単一のコントローラーで複数のエンティティを使用することもできますか?

このようなことを行うためのルートは、基本的に、アプリケーションにライブモードとテストモードの2つのモードがあり、ユーザーはどちらのモードでもデータを保存できます(支払いゲートウェイバックエンドのサンドボックスモードやライブモードなど)。

モードごとに1つずつ、2つの異なるテーブルが必要です。たとえば、ユーザーが行う支払いのpayment_testテーブルとpayment_liveテーブルなどです。

したがって、私のコントローラーでは、ユーザーが使用している現在のモード(テストまたはライブ)に基づいて、データをそれぞれのエンティティ(PAYMENT_LIVEまたはPAYMENT_TEST)から取得/保存する必要があります。

すべての場所で現在のモードの条件を確認することは悪い悪い考えだと思います。したがって、一度CURRENT_MODE CONSTANTに設定してから、次のようにエンティティ名を動的に使用するために使用します。

    public function indexAction()
        {
            return new ViewModel(array(
                'payments' => $this->getEntityManager()->getRepository('Payment\Entity\Payment_'.CURRENT_MODE.')->findAll() 
));
        }

これは、CURRENT_MODE = "live"または"test"の値に基づいて、ライブモードにPayment_liveエンティティを使用し、テストモードにPayment_testエンティティを使用します。

これを実装するにはどうすればよいですか?

4

1 に答える 1

1

私が最初に考えたのは、モードを照会するための識別子だけでなく、2つのテーブルがある理由です。フィールドは、テーブル(ライブtrue / falseのブール値である可能性があります)または何かpaymentsと呼ばれるテーブルをインサイアします。payment_modus

それ以外に、もちろん、1つのコントローラーに複数のリポジトリーを含めることができます。

$repo = 'Payment\Entity\Payment_'.$this->getCurrentMode();
$em->getRepository($repo);

私はあなたの問題が実際にどこにあるのか本当に理解していないので、答えるのはちょっと難しいです。

于 2013-01-04T20:31:47.590 に答える