3
以下代碼與AbstractPlugin正常工作,但我需要訪問視圖助手中的實體管理器。我如何才能在視圖助手中獲得實體經理?如何獲得實體經理在視圖幫助使用doctrine2 zf2
有沒有辦法在註冊表中的某處保存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
錯誤說你沒有實例化你的ServiceManager。也許這會解決你的問題? –
你能指導我如何在viewhelper中做到這一點 – Developer
如果你需要在你的ViewHelper中使用SM,你必須先注入它。你可以通過View來傳遞它,方法是將其分配給視圖,然後將其分配給視圖內的ViewHelper('$ this-> helperName() - > setServiceManager($ sm);'once)。但是,我認爲View Helpers不應該執行數據(基本)邏輯。它們的目的是提供可重用的片段來改變某些東西的外觀。如果您需要知道某人是否被授權,我寧願將其作爲控制器插件或任何其他課程中的內容,並將此信息傳遞給視圖。 –