gpt4 book ai didi

doctrine-orm - 如何使用 doctrine2 zf2 在 View 助手中获取实体管理器

转载 作者:行者123 更新时间:2023-12-04 05:14:11 25 4
gpt4 key购买 nike

以下代码与 AbstractPlugin 一起工作正常,但我需要在 View 助手中访问实体管理器。如何在 View 助手中获取实体管理器?

有没有办法将 entityManager 实例保存在注册表中的某处,以便我可以随时随地访问它?这是一个好的做法吗?

use Zend\View\Helper\AbstractHelper;
use Doctrine\ORM\EntityManager;
use Zend\ServiceManager\ServiceManagerAwareInterface;
use Zend\ServiceManager\ServiceManager;


class IsAuthz extends AbstractHelper implements ServiceManagerAwareInterface
{

/*
* @var Doctrine\ORM\EntityManager
*/
protected $em;
protected $sm;

public function __construct($e) {
$app = $e->getParam('application');
$em = $this->getEntityManager();
}


public function __invoke()
{
return $this;

}



/**
* @return Doctrine\ORM\EntityManager
*/
public function getEntityManager()
{

if (null === $this->em) {
$this->em = $this->sm->getServiceLocator()->get('doctrine.entitymanager.orm_default');
}
return $this->em;
}

/**
*
* @param \Doctrine\ORM\EntityManager $em
*/
public function setEntityManager(EntityManager $em)
{
$this->em = $em;
}

/**
* Retrieve service manager instance
*
* @return ServiceManager
*/
public function getServiceManager()
{
return $this->sm->getServiceLocator();
}

/**
* Set service manager instance
*
* @param ServiceManager $locator
* @return void
*/
public function setServiceManager(ServiceManager $serviceManager)
{
$this->sm = $serviceManager;
}



}

错误:

Fatal error: Call to a member function getServiceLocator() on a non-object in XXX/XXX/src/XXX/View/Helper/IsAuthz.php on line 41

最佳答案

正如“Daniel M”所说,最好使用服务来保持数据逻辑分离。但是有人仍然想在 View 助手中使用数据逻辑,他可以按如下方式进行。我已将上述有问题的代码更改如下。

public function __construct($e, $sm) {
$app = $e->getParam('application');
$this->sm = $sm;
$em = $this->getEntityManager();
}

然后我使用

从 module.php 注入(inject) $sm 对象
    public function onBootstrap($e)
{
$serviceManager->get('viewhelpermanager')->setFactory('IsAuthz', function ($sm) use ($e) {
return new \xxx\View\Helper\IsAuthz($e, $sm);
});
}

更好的方法是 use service in zend framework 2为此目的。

关于doctrine-orm - 如何使用 doctrine2 zf2 在 View 助手中获取实体管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12510636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com