Symfony 5.0.8迁移至5.2.5时findBy触发Doctrine Inflector弃用的解决问询
场景说明
从Symfony 5.0.8迁移至5.2.5版本,完成所有弃用问题处理后,仅剩余一项未解决的弃用提示:
Doctrine\Common\Inflector\Inflector::classify方法已弃用,将在doctrine/inflector 2.0中移除,请更新至新的Inflector API
该提示会在每次调用仓储类的findBy系列方法时触发。
问题根因
该提示并非业务代码主动调用旧Inflector方法导致,而是当前环境下的Doctrine ORM组件,在处理仓储查询的类名-表名映射逻辑时,内部调用了旧版doctrine/inflector1.x分支中已标记弃用的classify方法。
具体解决步骤
- 执行
composer show doctrine/inflector确认当前安装的Inflector版本,从Symfony 5.0.8迁移的项目通常仍停留在1.4.x旧版本 - 执行
composer require doctrine/inflector:^2.0升级Inflector到2.x分支,该分支的API已经替换了旧的弃用方法 - 若升级过程中出现依赖冲突,检查当前安装的
doctrine/orm版本:2.7及更早版本的ORM仅兼容1.x版Inflector,此时需同步升级ORM至兼容2.x Inflector的版本,执行composer require doctrine/orm:^2.9即可,该版本完全适配Symfony 5.2.5的依赖兼容要求 - 依赖安装完成后执行
php bin/console cache:clear清除项目缓存,再测试仓储findBy方法调用,弃用提示将不再触发
注意事项
- 无需修改任何业务仓储代码,该问题为组件层的版本适配问题,不存在需要业务侧重构的逻辑
- 不建议通过屏蔽弃用警告的方式消去提示,升级对应兼容版本的组件是官方推荐的一劳永逸的解决方案,不会残留未来版本升级的兼容隐患
内容的提问来源于stack exchange,提问作者Carré d'As
相关产品推荐
相关产品推荐

