Я использую 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
я получаю следующую ошибку:
Допустимая фатальная ошибка: аргумент 1 передан DoctrineModule \ Stdlib \ Hydrator \ DoctrineObject :: __ construct () должен быть экземпляром Doctrine \ Common \ Persistence \ ObjectManager, не указанным в C: \ vendor \ zendframework \ zendframework \ library \ Zend \ Form \ Factory.php в строке 566 и определен в C: \ vendor \ doctrine \ doctrine-module \ src \ DoctrineModule \ Stdlib \ Hydrator \ DoctrineObject.php в строке 63
Я не могу использовать Zend\Stdlib\Hydrator\ObjectProperty
потому что тогда я получаю
Неустранимая ошибка: невозможно получить доступ к защищенному объекту
Я совсем потерян. Кто-нибудь знает, что я могу сделать, чтобы исправить эту проблему?
Я предполагаю, что мне нужна функция __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)
или начните вот так:
/** @ORM\Entity
Не спрашивайте меня, почему это происходит (некоторая ошибка синтаксического анализа?). Я нашел это в сообщении на GitHub, где кто-то сообщал о подобной проблеме ( https://github.com/doctrine/common/issues/331 ). Насколько я понял, ошибка – это не доктрина, а проблема ZF2, о которой сообщалось.
Не уверен, что это ваша проблема, но публикация этого была наименее возможной …
Пожалуйста, взгляните на это решение , это preatty хорошо