Php Zend Framework 2-批注表单和Doctrine2-可捕获致命错误-ObjectManager

Php Zend Framework 2-批注表单和Doctrine2-可捕获致命错误-ObjectManager,php,doctrine-orm,zend-framework2,zend-db,Php,Doctrine Orm,Zend Framework2,Zend Db,我正在使用Zend、Doctrine2.1和注释表单 我的实体如下所示: /** * @ORM\Entity * @ORM\Table(name="myentity") * @Form\Name("myentity") * @Form\Attributes({ "class": "form-horizontal" }) * @Form\Hydrator("\DoctrineModule\Stdlib\Hydrator\DoctrineObject") */ class MyEntity

我正在使用Zend、Doctrine2.1和注释表单

我的实体如下所示:

/**
 * @ORM\Entity
 * @ORM\Table(name="myentity")
 * @Form\Name("myentity")
 * @Form\Attributes({ "class": "form-horizontal" })
 * @Form\Hydrator("\DoctrineModule\Stdlib\Hydrator\DoctrineObject")
*/
class MyEntity {
   ...
}
/** @ORM\Entity
使用此
DoctrineObject
时,我得到以下错误:

可捕获的致命错误:传递给DoctrineModule\Stdlib\Hydrator\DoctrineObject::\uu construct()的参数1必须是Doctrine\Common\Persistence\ObjectManager的实例,未给出任何实例,在第566行的C:\vendor\zendframework\zendframework\library\Zend\Form\Factory.php中调用,并在第63行的C:\vendor\doctrine\DoctrineModule\src\DoctrineModule\Stdlib\Hydrator\DoctrineObject.php中定义

我不能使用
Zend\Stdlib\Hydrator\ObjectProperty
,因为这样我就

致命错误:无法访问受保护的属性

我完全迷路了。有人知道我能做些什么来解决这个问题吗


我猜我需要一个
\u construct()
函数。但是我应该在里面放些什么呢?

有人可能会提出一个只包含注释的函数,如果它存在的话,同时您可以采用以下方法:

$form = //create the annotation form WITHOUT a hydrator
$objectManager = $serviceLocator->get('Doctrine\ORM\EntityManager');
$hydrator = new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($objectManager);
$form->setHydrator($hydrator);

//continue in your controller

在注释表单方面也有问题。我的解决方案打破了我的思维。我花了很长时间才发现。 我的问题出在注释代码的第一行

/**
这一行通常用于注释注释代码,但大多数人都将其留空。通常没有问题,但这在某种程度上导致了表单注释中的问题。您应该添加一些注释、添加空格或将第一行代码上移。因此:

/** Some comment to make this annotation work
/** (<-- a space)
不要问我为什么会发生这种情况(一些解析错误?)。我在GitHub上的一篇帖子中发现了这个问题,有人报告说有类似的问题()。据我所知,该缺陷不是一个原则,而是一个ZF2问题,已经有报道


不确定这是否也是您的问题,但发布这篇文章是我至少能做的…

请看一看,这很好

得到同样的错误。也许我拿错服务定位器了?您从哪里获得它?在控制器范围上,这将是
$this->getServiceLocator()
——但如果这不起作用,我认为我的方法根本不起作用。如前所述:毕竟对注释形式的了解不够:太好了,这正是我在回答中所说的:D见第#1:p行的注释问题是:当我不使用水合器时,一切都正常。无论如何,我为什么需要它呢?水合器的工作是正确地提取和水合对象内外的数据。尝试更新一个对象而不使用增强器,如果它起作用,我会感到惊讶。也许,不管怎样,它会回到类方法,所以…:)如果链接在某一点上出现故障,也许您应该进一步解释解决方案。1)您是否可以确认通过
FormElementManager
服务实例化表单?2) 您是否尝试将
DoctrineModule\Stdlib\Hydrator\DoctrineObject
注册为工厂?