所以我有 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'
您缺少
doctrine/annotations
依赖项。尝试添加到您的 composer.json
文件中:
"doctrine/annotations": "^1.0",
然后运行
composer update
。或者直接运行:
composer require doctrine/annotations
这不会是您问题的确切答案,但我的建议是移动 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
您应该使用 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.
我已通过添加更正错误:
composer require doctrine/annotations
在 symfony
6.4
及以上版本中,如果出现 non-existent service "annotation_reader".
错误,
您可能需要从
annotations: false
中删除 config/packages/framework.yaml
。