PluginManager :: get无法为getObjectManager获取或创建实例

时间:2014-02-17 15:40:19

标签: php doctrine-orm zend-framework2 zend-db

所以我的问题是在Zend Framework 2中使用Doctrine 2.我正确安装了Doctrine,当我尝试在控制器中使用它时,我收到了这个错误:

C:\wamp2\www\zf2\vendor\zendframework\zendframework\library\Zend\ServiceManager\ServiceManager.php:518

和此:

Zend\Mvc\Controller\PluginManager::get was unable to fetch or create an instance for getObjectManager

这是我的控制者:

class BlogController extends AbstractActionController
{

    public function blogAction()
    {
        $article = $this->getObjectManager()->getRepository('\Application\Entity\Article')->findAll();

        return new ViewModel(array('article' => $article));
    }
}

这是我的观点:

<?php if (isset($article)) : ?>
    <?php foreach($article as $articles): ?>
        <div class="col-lg-12 text-center">
            <img class="img-responsive img-border img-full" src="" alt="">
            <h2><?php echo $articles->getTitle(); ?>
                <br>
                <small><?php echo $articles->getDate(); ?></small>
            </h2>
            <p><?php echo $articles->getContent(); ?></p>
            <a href="<?php echo $this->url('article') ?>" class="btn btn-default btn-lg">Read More</a>
            <hr>
        </div>
    <?php endforeach; ?>
<?php endif; ?>

对于我遵循此tutorial

的配置

2 个答案:

答案 0 :(得分:3)

可悲的是,你没有关注教程,否则你会注意到在教程中他们在Controller中定义了一个函数getObjectManager()。您没有定义此函数,因此Controller假定它是ControllerPlugin,因此要求ControllerPluginManager为此插件创建一个实例。但是没有注册这样的插件,这就是你看到这个错误的原因。

TL / DR - &gt;一步一步地完成教程。了解你在做什么,不要盲目地复制粘贴你认为重要的行。

答案 1 :(得分:0)

您忘记为您的控制器实施getObjectManager

protected function getObjectManager()
    {
        if (!$this->_objectManager) {
            $this->_objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
        }

        return $this->_objectManager;
    }

此方法包含在您提及的教程中IndexController的末尾。