magento2 - Magento 2 Override by preference 在我的自定义模块中不起作用
问题描述
我试图覆盖
<preference for="Magento\Customer\Model\CustomerRegistry" type="Mycustom\Mymodule\Model\CustomerRegistry" />
在 etc/di.xml 下。但是运行后
php bin/magento 设置:升级
命令将收到“目录规则索引失败”错误消息。在 system.log 文件下,它将显示以下错误消息 -
创建对象时发生类型错误:Magento\Customer\Model\ResourceModel\AddressRepository,
注意:我已删除生成的文件夹并运行所有必需的命令。另外,我的magento版本是2.3。
解决方案
我有一个类似的问题,即对注入插件构造函数的类的偏好。
问题似乎是Magento开发者模式导致插件执行时没有生成所有DI数据,导致执行构造函数时出错,DI失败。
切换到默认模式似乎可以解决问题。
bin/magento deploy:mode:set default
无论如何,我最终更改了使用被覆盖类的类的实现,以便使用被首选项覆盖的自定义接口,并使用模块依赖项在修改后的模块依赖项(使用序列依赖项)加载我的新模块。
这不是最好的解决方案,但它有效,我可以这样做,因为这两个模块都来自我的公司,并且在 app/code 文件夹中实现。
如果可以的话,你应该使用插件而不是偏好。
推荐阅读
- sql - 如何从 Oracle 时间戳值中仅提取时间分量?
- javascript - 我如何让 Magit 与 Commitizen 合作?
- java - 在 Java 中将 DefaultListModel 转换为 List
- vue.js - 为什么一些 Vue 自定义组件可以做`
`? - php - 在文件夹中搜索具有我指定名称的任何子文件夹并获取其 ID
- laravel - Laravel 急切加载两个模型之间的关系会导致其他模型之间的关系返回错误的结果
- github - Github - 如何在移动设备上编辑 github 存储库描述
- mongodb - Discord.js TypeError:无法读取用户定义中未定义的属性“发送”
- ms-access - 访问文本框自定义数字格式
- c# - 使用单例数据源的瞬态和作用域服务