KnpLabs / DoctrineBehaviors

Doctrine2 behavior traits that help handling Blameable, Loggable, Sluggable, SoftDeletable, Uuidable, Timestampable, Translatable, Tree behavior
http://knplabs.com
MIT License
911 stars 287 forks source link

Proxies\__CG__ error ? #573

Closed tamert closed 3 years ago

tamert commented 4 years ago

Only one record exploded this error

The form's view data is expected to be an instance of class Proxies__CG__\App\Entity\UserLevelTranslation, but is an instance of class App\Entity\UserLevelTranslation. You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms an instance of class App\Entity\UserLevelTranslation to an instance of Proxies__CG__\App\Entity\UserLevelTranslation.

Why one record " instance of Proxies__CG__\App\Entity\UserLevelTranslation." ? I have no idea

TomasVotruba commented 4 years ago

Hi, this might be impossible to fix without real code. Could you provide pull-request with test case to reproduce?

burrag commented 3 years ago

I change static::class in \Knp\DoctrineBehaviors\Model\Translatable\TranslatableMethodsTrait::getTranslationEntityClass to self::class and it works. Makes sance. In tag 1.6.0 there was __CLASS__.

TomasVotruba commented 3 years ago

@burrag Thank for the solution

cmarsaudon687 commented 1 year ago

I change static::class in \Knp\DoctrineBehaviors\Model\Translatable\TranslatableMethodsTrait::getTranslationEntityClass to self::class and it works. Makes sance. In tag 1.6.0 there was __CLASS__.

Thanks ! same problem and resolved

psihius commented 2 months ago

With the latest 2.6.2 this is not solved,you need to use self instead of static in referred above case. Here's some debug output what happens:

self::class: App\Entity\Location
static::class: App\Entity\Location

#0 [internal function]: App\Entity\Location::getTranslationEntityClass()
#1 /var/www/html/vendor/knplabs/doctrine-behaviors/src/EventSubscriber/TranslatableEventSubscriber.php(114): ReflectionMethod->invoke()
#2 /var/www/html/vendor/knplabs/doctrine-behaviors/src/EventSubscriber/TranslatableEventSubscriber.php(54): Knp\DoctrineBehaviors\EventSubscriber\TranslatableEventSubscriber->mapTranslatable()
#3 /var/www/html/vendor/symfony/doctrine-bridge/ContainerAwareEventManager.php(63): Knp\DoctrineBehaviors\EventSubscriber\TranslatableEventSubscriber->loadClassMetadata()
#4 /var/www/html/vendor/doctrine/orm/src/Mapping/ClassMetadataFactory.php(250): Symfony\Bridge\Doctrine\ContainerAwareEventManager->dispatchEvent()
#5 /var/www/html/vendor/doctrine/doctrine-bundle/src/Mapping/ClassMetadataFactory.php(18): Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata()
#6 /var/www/html/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php(343): Doctrine\Bundle\DoctrineBundle\Mapping\ClassMetadataFactory->doLoadMetadata()
#7 /var/www/html/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php(207): Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata()
#8 /var/www/html/vendor/doctrine/orm/src/EntityManager.php(318): Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor()
#9 /var/www/html/vendor/doctrine/orm/src/UnitOfWork.php(3011): Doctrine\ORM\EntityManager->getClassMetadata()

-----------------
self::class: App\Entity\OnboardingMessage
static::class: App\Entity\OnboardingMessage

#0 [internal function]: App\Entity\OnboardingMessage::getTranslationEntityClass()
#1 /var/www/html/vendor/knplabs/doctrine-behaviors/src/EventSubscriber/TranslatableEventSubscriber.php(114): ReflectionMethod->invoke()
#2 /var/www/html/vendor/knplabs/doctrine-behaviors/src/EventSubscriber/TranslatableEventSubscriber.php(54): Knp\DoctrineBehaviors\EventSubscriber\TranslatableEventSubscriber->mapTranslatable()
#3 /var/www/html/vendor/symfony/doctrine-bridge/ContainerAwareEventManager.php(63): Knp\DoctrineBehaviors\EventSubscriber\TranslatableEventSubscriber->loadClassMetadata()
#4 /var/www/html/vendor/doctrine/orm/src/Mapping/ClassMetadataFactory.php(250): Symfony\Bridge\Doctrine\ContainerAwareEventManager->dispatchEvent()
#5 /var/www/html/vendor/doctrine/doctrine-bundle/src/Mapping/ClassMetadataFactory.php(18): Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata()
#6 /var/www/html/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php(343): Doctrine\Bundle\DoctrineBundle\Mapping\ClassMetadataFactory->doLoadMetadata()
#7 /var/www/html/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php(207): Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata()
#8 /var/www/html/vendor/doctrine/orm/src/EntityManager.php(318): Doctrine\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor()
#9 /var/www/html/vendor/doctrine/orm/src/UnitOfWork.php(3011): Doctrine\ORM\EntityManager->getClassMetadata()

-----------------
self::class: App\Entity\Location
static::class: Proxies\__CG__\App\Entity\Location

#0 /var/www/html/vendor/a2lix/translation-form-bundle/src/Form/EventListener/TranslationsListener.php(124): App\Entity\Location::getTranslationEntityClass()
#1 /var/www/html/vendor/a2lix/translation-form-bundle/src/Form/EventListener/TranslationsListener.php(47): A2lix\TranslationFormBundle\Form\EventListener\TranslationsListener->getTranslationClass()
#2 /var/www/html/vendor/symfony/event-dispatcher/EventDispatcher.php(220): A2lix\TranslationFormBundle\Form\EventListener\TranslationsListener->preSetData()
#3 /var/www/html/vendor/symfony/event-dispatcher/EventDispatcher.php(56): Symfony\Component\EventDispatcher\EventDispatcher->callListeners()
#4 /var/www/html/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php(30): Symfony\Component\EventDispatcher\EventDispatcher->dispatch()
#5 /var/www/html/vendor/symfony/form/Form.php(289): Symfony\Component\EventDispatcher\ImmutableEventDispatcher->dispatch()
#6 /var/www/html/vendor/symfony/form/Extension/Core/DataMapper/DataMapper.php(50): Symfony\Component\Form\Form->setData()
#7 /var/www/html/vendor/symfony/form/Form.php(323): Symfony\Component\Form\Extension\Core\DataMapper\DataMapper->mapDataToForms()
#8 /var/www/html/vendor/symfony/form/Form.php(412): Symfony\Component\Form\Form->setData()
#9 /var/www/html/vendor/symfony/form/FormBuilder.php(176): Symfony\Component\Form\Form->initialize()

As you can note, the static keyword resolves the class name before it is initialized properly to a Proxy class instead of actual entity.