尝试和数据到数据库并得到一个错误:
未捕获错误:在null中调用成员函数persist()
public function addNewPostAction()
{
// Create new Post entity..
// $entityManager = $container->get('doctrine.entitymanager.orm_default');
$post = new Post();
$post->setTitle('Top 10+ Books about Zend Framework 3');
$post->setContent('Post body goes here');
$post->setStatus(Post::STATUS_PUBLISHED);
$currentDate = date('Y-m-d H:i:s');
$post->setDateCreated($currentDate);
$this->entityManager->persist($post);
$this->entityManager->flush();
}
更新:错误:Zend \ Mvc \ Controller \ PluginManager :: get无法获取或创建实例获取
public function addNewPostAction()
{
// Create new Post entity..
// $entityManager = $container->get('doctrine.entitymanager.orm_default');
$post = new Post();
$post->setTitle('Top 10+ Books about Zend Framework 3');
$post->setContent('Post body goes here');
$post->setStatus(Post::STATUS_PUBLISHED);
$currentDate = date('Y-m-d H:i:s');
$dm = $this->get('doctrine.odm.mongodb.document_manager');
$dm->persist($post);
$dm->flush();
}
从上面的2个样本中可以看出,你正试图获得学说的实体经理。
第一个样本:
$this->entityManager
可能没有设置控制器的属性$ entityManager,也来自注释代码“$ entityManager = $ container-> get('doctrine.entitymanager.orm_default');”很明显,你正试图获得实体经理。
第二个样本:
$this->get('doctrine.odm.mongodb.document_manager');
我假设这是来自symfony的例子。
无论如何要在你的控制器中获取doctrine manager,你必须注入它,更改你的控制器构造函数以接受它作为参数:
class IndexController extends AbstractActionController
{
private $doctrineManager;
public function __construct($doctrineManager)
{
$this->doctrineManager = $doctrineManager;
}
然后将doctrine manager注入module.config.php中的控制器工厂:
'controllers' => [
'factories' => [
Controller\IndexController::class => function ($container) {
return new Controller\IndexController(
$container->get('doctrine.odm.mongodb.document_manager')
);
},
// ...
],
],
注意:抛出错误“Zend \ Mvc \ Controller \ PluginManager :: get无法获取或为get创建实例”,因为zend尝试任何未定义的方法将它们解析为插件,例如。如果你定义一个名为myAwesomePlugin的插件,你可以在你的动作中访问它:
$this->myAwesomePlugin();