Итак, у меня есть Symfony 6.2 API, кодовая база PHP 8.2.
При попытке запустить установку/обновление композитора отображается следующая ошибка, и мне интересно, как ее очистить:
In CheckExceptionOnInvalidReferenceBehaviorPass.php line 83:
The service "doctrine.orm.default_annotation_metadata_driver" has a dependency
on a non-existent service "doctrine.orm.metadata.annotation_reader".
Если я закомментирую раздел сопоставлений в файле doctrine.yaml (ниже), композитор запустится успешно, однако все POST-запросы к API приведут к следующей ошибке:
Could not find the entity manager for class App\Entity\Token.
Check your Doctrine configuration to make sure it is configured
to load this entity’s metadata. (500 Internal Server Error)
Почесал голову здесь, чтобы понять, как это решить. У меня есть ощущение, что это может быть связано с доктриной.yaml, но я могу ошибаться.
композитор.json:
"require": {
"php": ">=8.2",
...
"doctrine/doctrine-bundle": "^2.8",
"doctrine/doctrine-migrations-bundle": "^3.2",
"doctrine/orm": "^2.14",
...
},
доктрина.yaml:
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
auto_mapping: true
mappings:
App:
is_bundle: false
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
Поскольку аннотации устарели, в идеале мы должны удалить этот компонент.






Вам не хватает doctrine/annotationsзависимости. Попробуйте добавить в свой файл composer.json:
"doctrine/annotations": "^1.0",
Тогда беги composer update. Или просто запустите:
composer require doctrine/annotations
это само по себе не помогает, и composer require doctrine/annotations намного лучше.
Это не будет точным ответом на ваш вопрос, но я советую переместить атрибуты PHP 8.1 вместо аннотаций доктрины.
Попытка установить doctrine/annotations, для которого потребуется версия 2.0, привела к конфликтам с другими инструментами, для которых требовалась версия 1.x.
Установите тип сопоставления Symfony DoctrinBundle на attribute
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
form:
...
mappings:
App:
is_bundle: false
type: attribute
Более подробную информацию о настройках атрибута можно найти здесь:
https://www.doctrine-project.org/projects/doctrine-orm/en/2.14/reference/attributes-reference.html
Вам нужно было сделать что-то еще? Это само по себе не устраняет зависимость.
Ах, нашел, doctrine.orm.auto_mapping тоже должен быть false.
Вы должны использовать атрибуты PHP 8 для аннотаций маршрутизации вместо использования устаревшего пакета doctrine/annotations, как указано в их уведомлении об устаревании: https://www.doctrine-project.org/projects/doctrine-annotations/en/2.0/index.html# уведомление об устаревании
PHP 8 introduced attributes, which are a native replacement for annotations.
As such, this library is considered feature complete,
and should receive exclusively bugfixes and security fixes.
Как вы создали свое приложение? Простой
symfony new --webappили какой-то другой более сложный подход? Похоже, вам не хватает зависимости от доктрины.