【问题标题】:Magento 2 Override by preference not working in my custom moduleMagento 2 Override by preference 在我的自定义模块中不起作用
【发布时间】:2019-10-01 03:08:57
【问题描述】:

我试图覆盖

<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。

【问题讨论】:

    标签: magento2 magento-2.3


    【解决方案1】:

    我遇到了同样的问题,经过数小时的搜索,我发现有些类不能被覆盖。您可以在此处查看有关此问题的更多详细信息:

    https://github.com/magento/magento2/issues/2674

    我使用 magento "around" 插件而不是 &lt;preference/&gt;

    【讨论】:

      【解决方案2】:

      我有一个类似的问题,即对注入插件构造函数的类的偏好。

      问题似乎是Magento开发者模式导致插件执行时没有生成所有DI数据,导致执行构造函数时出错,DI失败。

      切换到默认模式似乎可以解决问题。

      bin/magento deploy:mode:set default
      

      无论如何,我最终更改了使用被覆盖类的类的实现,以便使用被首选项覆盖的自定义接口,并使用模块依赖项使我的新模块在修改后加载(使用序列依赖)。

      这不是最好的解决方案,但它有效,我可以这样做,因为这两个模块都来自我的公司,并且在 app/code 文件夹中实现。

      如果可以的话,你应该使用插件而不是偏好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-10
        相关资源
        最近更新 更多