Zend Framework 2 - Annotation forms和Doctrine2 - Catchable致命错误 - ObjectManager

时间:2012-12-27 13:43:36

标签: php doctrine-orm zend-framework2 zend-db

我使用Zend,Doctrine2.1和AnnotationForms。

我的实体看起来像这样:

/**
 * @ORM\Entity
 * @ORM\Table(name="myentity")
 * @Form\Name("myentity")
 * @Form\Attributes({ "class": "form-horizontal" })
 * @Form\Hydrator("\DoctrineModule\Stdlib\Hydrator\DoctrineObject")
*/
class MyEntity {
   ...
}

使用此DoctrineObject时出现以下错误:

  

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

我无法使用Zend\Stdlib\Hydrator\ObjectProperty,因为我得到了

  

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

我很失落。有人知道我可以做些什么来解决这个问题吗?

我猜我需要一个__construct()功能。但是我该放什么?

3 个答案:

答案 0 :(得分:3)

有人可能会想出一个仅注释功能,如果存在,同时你可以采用这种方法:

$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

答案 1 :(得分:0)

注释表单也存在问题。我的解决方案令人心碎。花了我很长时间才发现。 我的问题出在注释代码的第一行。

/**

此行通常用于注释注释代码,但几乎所有人都将其留空。通常没有问题,但这在某种程度上导致形式注释中的问题。您应该添加一些注释,添加空格或移动第一行代码。所以:

/** Some comment to make this annotation work
/** (<-- a space)

或者像这样开始:

/** @ORM\Entity

不要问我为什么会这样(一些解析错误?)。我在GitHub上的一篇文章中发现了这一点,有人报告有类似的问题(https://github.com/doctrine/common/issues/331)。据我所知,这个错误不是一个学说,而是一个ZF2问题,并且已经有报道。

不确定这也是你的问题,但发布这个是我能做的最少......

答案 2 :(得分:-1)

请查看this solution,这是非常好的