如何在控制器动作中使用动态实体名称,在Zend框架2中使用原则2?
例如。
public function indexAction()
{
return new ViewModel(array(
'albums' => $this->getEntityManager()->getRepository('Album'Entity'[dynamic_entity_name]')->findAll()
));
}
此外,首先,我甚至可以在单个控制器中使用多个实体,就像我在这里的情况一样?
这样做的根是,我基本上在我的应用程序中有两种模式,live和test,用户可以在任何一种模式下保存数据(类似于支付网关后端的沙箱和live模式)。
我需要有两个不同的表,每个模式一个;例如,用户支付的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"的值,它将为live模式使用Payment_live实体,为测试模式使用Payment_test实体。
有什么想法我应该如何去实现这个吗?
我的第一个想法是:为什么有两个表,而不是只有一个标识符来查询模式。表payments
中的一个名为payment_modus
的字段(可以是一个布尔值,表示真/假)或其他东西。
除此之外,你当然可以在一个控制器中拥有多个存储库。
$repo = 'Payment'Entity'Payment_'.$this->getCurrentMode();
$em->getRepository($repo);
有点难回答,因为我真的不明白你的问题到底在哪里