如何为sensio框架控制器监听器启用注解阅读器服务?

Posted

技术标签:

【中文标题】如何为sensio框架控制器监听器启用注解阅读器服务?【英文标题】:How to enable the annotation reader service for sensio framework controller listener? 【发布时间】:2022-01-15 18:41:26 【问题描述】:

在作曲家更新以修复我的应用程序使用的包上的一些漏洞后,我处理了一个错误:

服务“sensio_framework_extra.controller.listener”依赖于不存在的服务“annotation_reader”

按照this answer 中的建议,我尝试添加doctrine/annotations 包,但它并没有解决我的问题(包似乎已经安装)。

λ composer require doctrine/annotations
Using version ^1.8 for doctrine/annotations
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Restricting packages listed in "symfony/symfony" to "4.2.*"
Nothing to install or update

这是我composer.json使用的包:

"require": 
    "php": "^7.1.3",
    "ext-ctype": "*",
    "ext-fileinfo": "*",
    "ext-iconv": "*",
    "ext-json": "*",
    "doctrine/doctrine-fixtures-bundle": "^3.1",
    "ekyna/payum-monetico-bundle": "^1.5",
    "gedmo/doctrine-extensions": "^2.4",
    "knplabs/knp-paginator-bundle": "^3.0",
    "payum/offline": "^1.5",
    "payum/paypal-express-checkout-nvp": "^1.5",
    "payum/payum-bundle": "^2.3",
    "php-http/guzzle6-adapter": "^2.0",
    "sensio/framework-extra-bundle": "^5.1",
    "stof/doctrine-extensions-bundle": "^1.3",
    "symfony/asset": "4.2.*",
    "symfony/console": "4.2.*",
    "symfony/dotenv": "4.2.*",
    "symfony/expression-language": "4.2.*",
    "symfony/flex": "^1.1",
    "symfony/form": "4.2.*",
    "symfony/framework-bundle": "4.2.*",
    "symfony/monolog-bundle": "^3.1",
    "symfony/orm-pack": "1.*",
    "symfony/process": "4.2.*",
    "symfony/security-bundle": "4.2.*",
    "symfony/serializer-pack": "1.*",
    "symfony/swiftmailer-bundle": "^3.1",
    "symfony/templating": "4.2.*",
    "symfony/translation": "4.2.*",
    "symfony/twig-bundle": "4.2.*",
    "symfony/validator": "4.2.*",
    "symfony/web-link": "4.2.*",
    "symfony/webpack-encore-bundle": "^1.4",
    "symfony/yaml": "4.2.*",
    "twig/extensions": "^1.5",
    "vich/uploader-bundle": "^1.8"
,
"require-dev": 
    "codeception/codeception": "^2.5",
    "codeception/c3": "2.*",
    "friendsofphp/php-cs-fixer": "^2.14",
    "php-coveralls/php-coveralls": "^2.1",
    "phpmd/phpmd": "2.*",
    "squizlabs/php_codesniffer": "*",
    "symfony/debug-pack": "*",
    "symfony/maker-bundle": "^1.11",
    "symfony/profiler-pack": "*",
    "symfony/test-pack": "^1.0",
    "symfony/web-server-bundle": "4.2.*"

编辑: 我正在使用所有框架,我已经手动删除了缓存以确保没有问题。我也重新启动了我的开发计算机。最后,我通过将我的 github 项目部署在另一个目录中解决了这个问题,并且应用程序运行良好。我没有关闭这个问题,因为如果它发生在生产中,我想找出问题。

【问题讨论】:

“将我的项目部署到另一个目录”是什么意思? 我像一个新项目一样安装它:git clone http://github.com/me/myproject.git projectCopy 但是您的项目(文件夹)与以前有何不同? oO 我将在两个目录之间启动一个差异,并在我检测到差异时立即在此处显示差异。 【参考方案1】:

由于学说(或学说/注释)本身不注册服务(为什么会这样),我查找了学说包,doctrine/doctrine-bundle 提供了annotation_reader 服务:https://github.com/doctrine/DoctrineBundle/blob/af8ac792c9b970ff2bc25b49ab9b31afd9e03dbf/Resources/config/orm.xml#L82

【讨论】:

感谢您的建议,但添加教义捆绑包不会改变任何事情。 有趣又令人困惑......你是在使用框架还是只是组合组件,因为这很奇怪...... 我正在使用该框架。我编辑了我的问题以提供更多信息以及我如何解决问题,但如果生产中出现问题,我想找到解决方案。【参考方案2】:

我在尝试创建新设置时遇到了一个非常相似的错误 (The service "doctrine.orm.default_annotation_metadata_driver" has a dependency on a non-existent service "annotation_reader".)。我记录了一些说明,并尝试在学说之前作曲家安装 ormfixtures (--dev)。一旦我以正确的顺序执行此操作,一切都会按预期进行。

我的具体示例来自 Twilio 的说明,这些命令按以下顺序排列:

composer req --dev maker ormfixtures fakerphp/faker
composer req doctrine twig

当我将它们颠倒为这个顺序时它起作用了:

composer req doctrine twig
composer req --dev maker ormfixtures fakerphp/faker

【讨论】:

它对我反转订单很有用!【参考方案3】:

从 Symfony 4.4 更新作曲家后,我遇到了同样的问题。 这是因为我在所有使用中都将 de "Doctrine\Common" 替换为 "Doctrine",而不是将 "Doctrine\Common\Persistence" 替换为 "Doctrine\Persistence"。

换句话说:不管你为什么会出现这个错误,它来自你代码中的一个损坏的命名空间。

这是SensioFrameworkExtraBundle的官方链接:https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/index.html

【讨论】:

以上是关于如何为sensio框架控制器监听器启用注解阅读器服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何为@RabbitListener 注解编写集成测试?

如何为android数据绑定点击监听器编写proguard规则?

如何为 UIScrollView 启用方向锁定?

如何为 OSX 菜单额外启用复制和粘贴

如何为 UIPageViewController 中的所有 webViews 文本字体启用缩放

如何为特定的构建配置启用 App Sandboxing