0

如何在控制器操作中使用动态实体名称,在 Zend 框架 2 中使用 Doctrine 2?

例如。

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

另外,首先,我什至可以在一个控制器中使用多个实体,就像我在这里的情况一样?

这样做的根源是,我的应用程序中基本上有两种模式,实时和测试,用户可以在任何一种模式下保存数据(例如支付网关后端的沙盒和实时模式)。

我需要有两个不同的表,每个模式一个;例如,用户付款的 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

我的第一个想法是:为什么有两个表而不仅仅是一个标识符来查询模式。一个字段 insire you tablepayments称为payment_modus(可能是实时真/假的布尔值)或其他东西。

除此之外,当然您可以在一个控制器中拥有多个存储库。

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

有点难以回答,因为我真的不明白你的问题到底出在哪里。

于 2013-01-04T20:31:47.590 回答