依赖于不存在的服务“doctrine.orm.metadata.annotation_reader”

Don*_*Msc 18 php orm doctrine symfony

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

\n

在尝试运行作曲家安装/更新时,显示以下错误,我想知道如何清除它:

\n
In CheckExceptionOnInvalidReferenceBehaviorPass.php line 83:\nThe service "doctrine.orm.default_annotation_metadata_driver" has a dependency \non a non-existent service "doctrine.orm.metadata.annotation_reader".\n
Run Code Online (Sandbox Code Playgroud)\n

如果我注释掉doctrine.yaml 文件(如下)中的映射部分,composer 会成功运行,但是对 api 的所有 POST 请求将导致以下错误:

\n
Could not find the entity manager for class App\\Entity\\Token.\nCheck your Doctrine configuration to make sure it is configured \nto load this entity\xe2\x80\x99s metadata. (500 Internal Server Error)\n
Run Code Online (Sandbox Code Playgroud)\n

在这里挠头以了解如何解决它。我有一种感觉,这可能与doctrine.yaml 相关,但我可能偏离了目标。

\n

作曲家.json:

\n
"require": {\n        "php": ">=8.2",\n        ...\n        "doctrine/doctrine-bundle": "^2.8",\n        "doctrine/doctrine-migrations-bundle": "^3.2",\n        "doctrine/orm": "^2.14",\n        ...\n    },\n
Run Code Online (Sandbox Code Playgroud)\n

学说.yaml:

\n
doctrine:\n    dbal:\n        url: '%env(resolve:DATABASE_URL)%'\n\n    orm:\n        auto_generate_proxy_classes: true\n        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware\n        auto_mapping: true\n        mappings:\n            App:\n                is_bundle: false\n                dir: '%kernel.project_dir%/src/Entity'\n                prefix: 'App\\Entity'\n
Run Code Online (Sandbox Code Playgroud)\n

COi*_*Oil 38

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

"doctrine/annotations": "^1.0",
Run Code Online (Sandbox Code Playgroud)

然后跑composer update。或者只是运行:

composer require doctrine/annotations
Run Code Online (Sandbox Code Playgroud)

  • 仅此并没有帮助,“作曲家需要学说/注释”要好得多。 (3认同)

Sim*_*amp 14

在 symfony6.4及更高版本中,如果出现non-existent service "annotation_reader".错误,

您可能需要annotations: false从 中删除config/packages/framework.yaml


Sto*_*lie 8

这不会是您问题的确切答案,但我的建议是移动 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
Run Code Online (Sandbox Code Playgroud)

有关属性设置的更多信息可以在此处找到:

https://www.doctrine-project.org/projects/doctrine-orm/en/2.14/reference/attributes-reference.html

  • 啊发现了,“doctrine.orm.auto_mapping”也需要是“false”。 (2认同)