如何为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框架控制器监听器启用注解阅读器服务?的主要内容,如果未能解决你的问题,请参考以下文章
如何为android数据绑定点击监听器编写proguard规则?