Php 在null上调用成员函数persist()
尝试将数据导入数据库,但出现错误: 未捕获错误:对成员函数的调用在 更新: 错误: Zend\Mvc\Controller\PluginManager::get无法获取或创建get的实例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');
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();