返回

Symfony 错误:如何解决 “不存在的服务 “doctrine.orm.metadata.annotation_reader””

php

Symfony 错误:不存在的服务 "doctrine.orm.metadata.annotation_reader"

问题

在 Symfony 项目中,你可能会遇到以下错误:

The service "doctrine.orm.default_annotation_metadata_driver" has a dependency on a non-existent service "doctrine.orm.metadata.annotation_reader".

这意味着服务 "doctrine.orm.default_annotation_metadata_driver" 依赖于不存在的服务 "doctrine.orm.metadata.annotation_reader"。

解决步骤

要解决此错误,请执行以下步骤:

1. 检查 Doctrine 配置

检查 doctrine.yaml 文件,确保 "doctrine.orm.metadata.annotation_reader" 服务已正确配置。

2. 启用注释读取器

在 doctrine.yaml 文件中,通过设置以下选项来启用注释读取器:

orm:
    metadata_cache_driver: array
    metadata_driver_chain:
        - driver: orm_default_annotation_metadata_driver

3. 清理缓存

运行以下命令清除缓存:

composer dump-autoload
php bin/console cache:clear

4. 检查实体

确保 Token 实体存在于 src/Entity 目录中,并且正确定义了 @ORM\Entity 注解。

解决 POST 请求错误

注释掉 doctrine.yaml 中的映射部分后,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.

要解决此错误,请确保 Token 实体的元数据已正确加载。

1. 检查映射

确保 Token 实体已正确映射到数据库。在 doctrine.yaml 文件中,添加以下映射:

mappings:
    App:
        is_bundle: false
        dir: '%kernel.project_dir%/src/Entity'
        prefix: 'App\Entity'
        entity_paths: [src/Entity/Token.php]

2. 清理缓存

再次运行以下命令清除缓存:

composer dump-autoload
php bin/console cache:clear

结论

通过遵循这些步骤,你应该能够解决 "doctrine.orm.default_annotation_metadata_driver" 依赖于不存在的服务 "doctrine.orm.metadata.annotation_reader" 的错误。

常见问题解答

  • 为什么会出现此错误?

这可能是因为 Doctrine 配置不正确或注释读取器未启用。

  • 如何检查 Doctrine 配置?

检查 doctrine.yaml 文件以确保服务 "doctrine.orm.metadata.annotation_reader" 已正确配置。

  • 如何启用注释读取器?

在 doctrine.yaml 文件中,设置选项 "orm.metadata_driver_chain" 并将 "orm_default_annotation_metadata_driver" 作为驱动程序之一。

  • 如何检查实体?

确保 Token 实体存在于 src/Entity 目录中,并且正确定义了 @ORM\Entity 注解。

  • 为什么 POST 请求会引发错误?

如果注释掉 doctrine.yaml 中的映射部分,则可能需要显式将 Token 实体映射到数据库。