Symfony2 Gedmo Loggable вылетает при сбросе

У меня есть проект Symfony2, и у меня проблема с расширением Gedmo Loggable.

У меня есть форма, которая создается и отправляется должным образом, проходит проверку, но когда $EntityManager->flush() вызывается для добавления данных формы в базу данных (MySQL с Doctrine), я получаю следующее:

FatalErrorException: Error: Call to undefined method Path\To\My\Entity\Class::setAction()
in /path/to/vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/LoggableListener.php line 225

at ErrorHandler->handleFatal() in /path/to/vendor/symfony/symfony/src/Symfony/Component/Debug/ErrorHandler.php line 0
at LoggableListener->createLogEntry() in /path/to/vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/LoggableListener.php line 188
at LoggableListener->onFlush() in /path/to/vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php line 61
at ContainerAwareEventManager->dispatchEvent() in /path/to/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php line 306
at UnitOfWork->commit() in /path/to/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php line 355
at EntityManager->flush() in /Path/To/My/Bundle/Controller.php line 364
at Controller->addEntityAction() in /Path/To/app/bootstrap.php.cache line 2891
at ??call_user_func_array() in /Path/To/app/bootstrap.php.cache line 2891
at HttpKernel->handleRaw() in /Path/To/app/bootstrap.php.cache line 2865
at HttpKernel->handle() in /Path/To/app/bootstrap.php.cache line 2994
at ContainerAwareHttpKernel->handle() in /Path/To/app/bootstrap.php.cache line 2274
at Kernel->handle() in /Path/To/web/app_dev.php line 28
at ??{main}() in /Path/To/web/app_dev.php line 0

Строка 188 LoggableListner.php:

    foreach ($ea->getScheduledObjectInsertions($uow) as $object) {
$this->createLogEntry(self::ACTION_CREATE, $object, $ea);
}

и полная функция, окружающая foreach по строке 188 есть:

public function onFlush(EventArgs $eventArgs)
{
$ea = $this->getEventAdapter($eventArgs);
$om = $ea->getObjectManager();
$uow = $om->getUnitOfWork();

foreach ($ea->getScheduledObjectInsertions($uow) as $object) {
$this->createLogEntry(self::ACTION_CREATE, $object, $ea);
}
foreach ($ea->getScheduledObjectUpdates($uow) as $object) {
$this->createLogEntry(self::ACTION_UPDATE, $object, $ea);
}
foreach ($ea->getScheduledObjectDeletions($uow) as $object) {
$this->createLogEntry(self::ACTION_REMOVE, $object, $ea);
}
}

Строка 225 LoggableListner.php это:

        /** @var \Gedmo\Loggable\Entity\LogEntry $logEntry */
$logEntry = $logEntryMeta->newInstance();

Мои сущности имеют стандартные аннотации Symfony2 для Loggable, а именно:

use Gedmo\Mapping\Annotation as Gedmo;

/**
* @Gedmo\Loggable(logEntryClass="My\Bundles\ThisBundle\ThisEntity")
*/

/**
* @ORM\Column(type="string", length=30, nullable=false)
* @Assert\Length(max=30)
* @Gedmo\Versioned
*/
protected $name;

И я понятия не имею, где setAction() звонок идет. В моем классе нет ничего с именем «действие», и нет такой функции или метода, как getAction(), addAction(), removeAction()и т. д. (и не должно быть из моего понимания.)

Спасибо за понимание и помощь!

0

Решение

Итак, после тщательного обхода трассировки стека и просмотра функций Loggable меня осенило, что ошибка явно связана с попыткой loggable реализовать функцию от одного из моих объектов, который сказал мне, что где-то у меня есть класс, где он не должен ‘ (как я хотел, чтобы Loggable использовал свои собственные классы и функции, а не мои).

Я поэтому изменился

/**
* @Gedmo\Loggable(logEntryClass="My\Bundles\ThisBundle\ThisEntity")
*/

чтобы просто

/**
* @Gedmo\Loggable
*/

Это означало, что он использовал свой собственный класс для ведения лесозаготовок и — вуаля. Нет больше ошибок.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]