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

Php 在null上调用成员函数persist(),php,zend-framework3,Php,Zend Framework3,尝试将数据导入数据库,但出现错误: 未捕获错误:对成员函数的调用在 更新: 错误: Zend\Mvc\Controller\PluginManager::get无法获取或创建get的实例 public function addNewPostAction() { // Create new Post entity.. // $entityManager = $container->get('doctrine.entitymanager.orm_default');

尝试将数据导入数据库,但出现错误:

未捕获错误:对成员函数的调用在

更新: 错误: Zend\Mvc\Controller\PluginManager::get无法获取或创建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();
}

从上面的两个示例中,很明显您正在尝试获取doctrine的实体管理器

第一个样本:

$this->entityManager
可能控制器的属性$entityManager没有设置,这也是来自注释代码

$entityManager = $container->get('doctrine.entitymanager.orm_default');
很明显,您正在尝试获取实体管理器

第二个样本:

$this->get('doctrine.odm.mongodb.document_manager');
我假设这是一个symfony示例

无论如何,要在控制器中获得条令管理器,必须将其注入,更改控制器构造函数以将其作为参数接受:

class IndexController extends AbstractActionController
{
    private $doctrineManager;

    public function __construct($doctrineManager)
    {
        $this->doctrineManager = $doctrineManager;
    }
然后将条令管理器注入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();
$this->myAwesomePlugin();