Dependency on a non-existent service "doctrine.orm.metadata.annotation_reader"

回答 3 浏览 2052 2023-01-02

所以我有一个Symfony 6.2的API,PHP 8.2的代码库。

当试图运行 composer install/update 时,显示了以下错误,我想知道如何清除它。

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文件中的mappings部分注释掉(如下),composer就能成功运行,但是所有向api发出的POST请求都会导致以下错误。

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)

我在这里搔首弄姿,想知道如何解决这个问题。我感觉这可能与doctrine.yaml有关,但我可能离目标很远。

composer.json:

"require": {
        "php": ">=8.2",
        ...
        "doctrine/doctrine-bundle": "^2.8",
        "doctrine/doctrine-migrations-bundle": "^3.2",
        "doctrine/orm": "^2.14",
        ...
    },

doctrine.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'
Donal.Lynch.Msc 提问于2023-01-02
你是如何创建你的应用程序的?是简单的symfony new --webapp还是其他更复杂的方法?听起来你好像缺少一个教义的依赖。Cerad 2023-01-02
随着注解的废弃,理想情况下,我们应该删除这个组件。Adambean 2023-02-02
3 个回答
#1楼 已采纳
得票数 8

你缺少doctrine/annotations依赖。尝试在你的composer.json文件中添加:

"doctrine/annotations": "^1.0",

然后运行composer update。或者直接运行:

composer require doctrine/annotations
COil 提问于2023-01-02
COil 修改于2023-01-06
仅仅这样做是没有用的,而composer require doctrine/annotations要好得多。Jakumi 2023-01-03
#2楼
得票数 3

这不会是你问题的确切答案,但我的建议是动用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

Stollie 提问于2023-01-04
Stollie 修改于2023-01-05
你还需要做什么吗?仅仅这样做并不能解决依赖性问题。Adambean 2023-02-02
啊,找到了,doctrine.orm.auto_mapping也需要falseAdambean 2023-02-02
#3楼
得票数 0

你应该使用PHP 8的属性来进行路由注释,而不是使用被废弃的doctrine/annotations包,正如他们的废弃通知中指出的那样。https://www.doctrine-project.org/projects/doctrine-annotations/en/2.0/index.html#deprecation-notice

    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.
David Lemaitre 提问于2023-02-06