如何在使用Doctrine 2的Zend框架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实体用于测试模式。
有什么想法我应该如何实现这个?
答案 0 :(得分:1)
我的第一个想法是:为什么有两个表而不仅仅是一个标识符来查询模式。一个字段会向你表payments
表payment_modus
(可能是真实/假的布尔值)或其他东西。
除此之外,当然您可以在一个控制器中拥有多个存储库。
$repo = 'Payment\Entity\Payment_'.$this->getCurrentMode();
$em->getRepository($repo);
有点难以回答,因为我真的不明白你的问题究竟在哪里。