Зависимость от несуществующей службы "doctrine.orm.metadata.annotation_reader"

Итак, у меня есть 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'

Как вы создали свое приложение? Простой symfony new --webapp или какой-то другой более сложный подход? Похоже, вам не хватает зависимости от доктрины.

Cerad 02.01.2023 18:40

Поскольку аннотации устарели, в идеале мы должны удалить этот компонент.

Adambean 02.02.2023 16:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
2
1 465
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам не хватает doctrine/annotationsзависимости. Попробуйте добавить в свой файл composer.json:

"doctrine/annotations": "^1.0",

Тогда беги composer update. Или просто запустите:

composer require doctrine/annotations

это само по себе не помогает, и composer require doctrine/annotations намного лучше.

Jakumi 03.01.2023 20:02

Это не будет точным ответом на ваш вопрос, но я советую переместить атрибуты 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

Вам нужно было сделать что-то еще? Это само по себе не устраняет зависимость.

Adambean 02.02.2023 16:39

Ах, нашел, doctrine.orm.auto_mapping тоже должен быть false.

Adambean 02.02.2023 16:47

Вы должны использовать атрибуты 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.

Другие вопросы по теме