在null上调用成员函数persist()

问题描述 投票:0回答:1

尝试和数据到数据库并得到一个错误:

未捕获错误:在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();
}
php zend-framework3
1个回答
1
投票

从上面的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();
© www.soinside.com 2019 - 2024. All rights reserved.