Cannot get DoctrineExtensions to work with Symfony 7
vitoff34 opened this issue · 3 comments
I am running Symfony 7. These are my settings files.
doctrine.yaml
mappings:
App:
type: attribute
is_bundle: false
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App
loggable:
type: attribute # or annotation or xml
alias: Gedmo
prefix: Gedmo\Loggable\Entity
dir: "%kernel.project_dir%/vendor/gedmo/doctrine-extensions/src/Loggable/Entity"
translatable:
type: attribute # or annotation or xml
alias: Gedmo
prefix: Gedmo\Translatable\Entity
# make sure vendor library location is correct
dir: "%kernel.project_dir%/vendor/gedmo/doctrine-extensions/src/Translatable/Entity"
services.yaml:
annotation_reader:
class: Doctrine\Common\Annotations\AnnotationReader
Gedmo\Translatable\TranslatableListener:
tags:
- { name: doctrine.event_listener, event: 'postLoad' }
- { name: doctrine.event_listener, event: 'postPersist' }
- { name: doctrine.event_listener, event: 'preFlush' }
- { name: doctrine.event_listener, event: 'onFlush' }
- { name: doctrine.event_listener, event: 'loadClassMetadata' }
calls:
- [ setAnnotationReader, [ "@annotation_reader" ] ]
- [ setDefaultLocale, [ "%kernel.default_locale%" ] ]
- [ setTranslationFallback, [ false ] ]
Gedmo\Loggable\LoggableListener:
tags:
- { name: doctrine.event_listener, event: 'onFlush' }
- { name: doctrine.event_listener, event: 'loadClassMetadata' }
- { name: doctrine.event_listener, event: 'postPersist' }
calls:
- [ setAnnotationReader, [ "@annotation_reader" ] ]
composer.json
{
"type": "project",
"license": "proprietary",
"minimum-stability": "stable",
"prefer-stable": true,
"require": {
"php": ">=8.2",
"ext-ctype": "*",
"ext-iconv": "*",
"doctrine/annotations": "^2.0",
"doctrine/dbal": "^3",
"doctrine/doctrine-bundle": "^2.11",
"doctrine/doctrine-migrations-bundle": "^3.3",
"doctrine/orm": "^3.0",
"friendsofsymfony/jsrouting-bundle": "^3.5",
"gedmo/doctrine-extensions": "3.13.0",
"symfony/asset": "7.0.*",
"symfony/asset-mapper": "7.0.*",
"symfony/cache": "6.4",
"symfony/console": "7.0.*",
"symfony/dotenv": "7.0.*",
"symfony/flex": "^2.4",
"symfony/form": "7.0.*",
"symfony/framework-bundle": "7.0.*",
"symfony/mailer": "7.0.*",
"symfony/runtime": "7.0.*",
"symfony/security-bundle": "7.0.*",
"symfony/translation": "7.0.*",
"symfony/twig-bundle": "7.0.*",
"symfony/validator": "7.0.*",
"symfony/yaml": "7.0.*",
"symfonycasts/verify-email-bundle": "^1.16",
"twig/extra-bundle": "^2.12|^3.0",
"twig/twig": "^2.12|^3.0"
},
"config": {
"allow-plugins": {
"php-http/discovery": true,
"symfony/flex": true,
"symfony/runtime": true
},
"sort-packages": true
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
}
},
"replace": {
"symfony/polyfill-ctype": "*",
"symfony/polyfill-iconv": "*",
"symfony/polyfill-php72": "*",
"symfony/polyfill-php73": "*",
"symfony/polyfill-php74": "*",
"symfony/polyfill-php80": "*",
"symfony/polyfill-php81": "*",
"symfony/polyfill-php82": "*"
},
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd",
"importmap:install": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
]
},
"conflict": {
"symfony/symfony": "*"
},
"extra": {
"symfony": {
"allow-contrib": false,
"require": "7.0.*"
}
},
"require-dev": {
"symfony/maker-bundle": "^1.55",
"symfony/stopwatch": "7.0.*",
"symfony/web-profiler-bundle": "7.0.*"
}
}
I want to implement Loggable and Translatable for my Recipe Entity.
<?php
namespace App\Entity;
use App\Repository\RecipeRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Loggable\Loggable;
use Gedmo\Mapping\Annotation as Gedmo;
#[ORM\Entity(repositoryClass: RecipeRepository::class)]
#[Gedmo\Loggable]
class Recipe
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\OneToOne(inversedBy: 'recipe', cascade: ['persist', 'remove'])]
private ?Product $product = null;
#[Gedmo\Loggable]
#[ORM\Column(length: 255, nullable: false)]
private ?string $title = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $description = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $timeToCook = null;
public function getId(): ?int
{
return $this->id;
}
}
When I run php bin/console doctrine:mapping:info I get this error:
assert($metadata instanceof DocumentClassMetadata || $metadata instanceof EntityClassMetadata).
This is the stack trace:
[debug] Notified event "console.command" to listener "Symfony\Bundle\FrameworkBundle\EventListener\ConsoleProfilerListener::initialize".
[debug] Notified event "console.command" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".
Found 16 mapped entities:
[critical] Error thrown while running command "doctrine:mapping:info -vvv". Message: "assert($metadata instanceof DocumentClassMetadata || $metadata instanceof EntityClassMetadata)"
[debug] Notified event "console.error" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SuggestMissingPackageSubscriber::onConsoleError".
[debug] Notified event "console.error" to listener "Symfony\Bundle\MakerBundle\Event\ConsoleErrorSubscriber::onConsoleError".
[debug] Notified event "console.error" to listener "Symfony\Component\Console\EventListener\ErrorListener::onConsoleError".
[debug] Notified event "console.error" to listener "Symfony\Bundle\FrameworkBundle\EventListener\ConsoleProfilerListener::catch".
[debug] Command "doctrine:mapping:info -vvv" exited with code "1"
[debug] Notified event "console.terminate" to listener "Symfony\Bundle\MakerBundle\Event\ConsoleErrorSubscriber::onConsoleTerminate".
[debug] Notified event "console.terminate" to listener "Symfony\Component\Console\EventListener\ErrorListener::onConsoleTerminate".
[debug] Notified event "console.terminate" to listener "Symfony\Bundle\FrameworkBundle\EventListener\ConsoleProfilerListener::profile".
[critical] Uncaught Error: assert($metadata instanceof DocumentClassMetadata || $metadata instanceof EntityClassMetadata)
Thank you for any help.
ORM 3.0 is not yet supported by this package, downgrade to 2.18.
This particular issue can be closed out. I just checked all of the assert()
calls and they are looking for the right ClassMetadata
objects for each version of the ORM in the latest release.
There's still work to do for ORM 3.x compat, but this isn't one of the things needing attention it appears.