在视图中传递对象管理器



将 ZF2 与教义 2 一起使用。

为了应用程序的需要,我objectmanager作为变量($om)传递了return new ViewModel

所以我可以在我的观点中使用它:

$om->getRepository('SchemaEntityCategory')->findBy(.....

让我感到困惑的是:

1) 我是否违反了 MVC 规则?(因为有人说这是一种不好的做法,而另一些人则不是)

2)使用这种策略开发应用程序时,我会遇到任何问题吗?

  1. 是的,你做
  2. 违反编码标准总是有负面的副作用

控制器的工作是将所需的数据传递到视图中。为此,控制器与模型交互。

public function fooAction() 
{
    return new ViewModel([
        'entities' => $this->getObjectManager()->findBy([
            'foo' => 'bar'
        ])
    ]);
}

这几乎就是你将要做到的。您的下一个问题应该是getObjectManager()做什么或如何将ObjectManager正确地注入控制器?

答案很简单:你必须使用控制器工厂

//module.config.php
'controllers' => [
    'factories' => [
        'YourNamespaceControllerFooController' => function($cpm) {
            $ctrl = new FooController();
            $ctrl->setObjectManager(
                $cpm->getServiceLocator()->get('DoctrineORMEntityManager')
            );
            return $ctrl;
        }
    ]
]

仅此而已。现在,您对要实现的目标有一个非常干净的设置;)

相关内容

  • 没有找到相关文章

最新更新