将ZF2与Doctrine 2一起使用。
对于应用程序的需求,我在objectmanager
$om
作为变量(return new ViewModel
)传递
所以我可以在我看来使用它:
$om->getRepository('\Schema\Entity\Category')->findBy(.....
令我困惑的是:
1)我是否打破了MVC规则? (因为有人说这是一种不好的做法而有些人则不这样做)
2)我是否会在使用这种策略开发应用程序时遇到任何问题?
答案 0 :(得分:1)
控制器的作业是将您需要的数据传递到视图中。为此,Controller与模型进行交互。
public function fooAction()
{
return new ViewModel([
'entities' => $this->getObjectManager()->findBy([
'foo' => 'bar'
])
]);
}
这就是你将如何做到的。下一个问题应该: getObjectManager()
做了什么或如何将ObjectManager
正确地注入控制器?
答案很简单:你必须使用Controller-Factories
//module.config.php
'controllers' => [
'factories' => [
'YourNamespace\Controller\FooController' => function($cpm) {
$ctrl = new FooController();
$ctrl->setObjectManager(
$cpm->getServiceLocator()->get('Doctrine\ORM\EntityManager')
);
return $ctrl;
}
]
]
这就是它的全部内容。现在你对你想要实现的目标进行了非常简洁的设置;)