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

问题描述 投票:0回答:5

所以我有 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 文件(如下)中的映射部分,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'
php symfony orm doctrine
5个回答
32
投票

您缺少

doctrine/annotations
依赖项。尝试添加到您的
composer.json
文件中:

"doctrine/annotations": "^1.0",

然后运行

composer update
。或者直接运行:

composer require doctrine/annotations

6
投票

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


2
投票

您应该使用 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.

1
投票

我已通过添加更正错误:

composer require doctrine/annotations

0
投票

在 symfony

6.4
及以上版本中,如果出现
non-existent service "annotation_reader".
错误,

您可能需要从

annotations: false
中删除
config/packages/framework.yaml

© www.soinside.com 2019 - 2024. All rights reserved.