Magento 2:通过首选项覆盖Magento_SalesRule ResourceModel会引发错误:类型创建对象时发生错误

问题描述

debug.log中的错误消息: a = lower1.count("a") + lower2.count("a") print(a)

我正在尝试覆盖:Magento \ SalesRule \ Model \ ResourceModel \ Coupon.PHP删除“唯一优惠券”限制:

[2020-11-10 07:57:17] main.CRITICAL: Type Error occurred when creating object: Magento\SalesRule\Model\ResourceModel\Rule,Argument 3 passed to Magento\SalesRule\Model\ResourceModel\Rule::__construct() must be an instance of Magento\SalesRule\Model\ResourceModel\Coupon,instance of RM\SameCouponMultiplediscounts\Model\ResourceModel\Coupon given,called in /home/rehan/lab/testrm/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.PHP on line 116 [] []

来自construct()方法

我的应用程序/代码/供应商/模块/模型/ResourceModel/Coupon.PHP如下:

$this->addUniqueField(['field' => 'code','title' => __('Coupon with the same code')]);

我的di.xml文件如下:

<?PHP
/**
 * copyright © Magento,Inc. All rights reserved.
 * See copYING.txt for license details.
 */
namespace vendor\Module\Model\ResourceModel;

use Magento\Framework\Model\AbstractModel;

/**
 * SalesRule Resource Coupon
 *
 * @author      Magento Core Team <core@magentocommerce.com>
 */
class Coupon extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements
    \Magento\SalesRule\Model\Spi\CouponResourceInterface
{
    /**
     * Constructor adds unique fields
     *
     * @return void
     */
    protected function _construct()
    {
        $this->_init('salesrule_coupon','coupon_id');
    }
}

我尝试清除缓存,生成文件夹并做了setup:di:compile,但是我仍然收到相同的错误

当我被卡住时,请在这里帮助我。

解决方法

您应该使覆盖的类扩展原始的类,以便依赖项注入原始类的其他本机类可以识别您的覆盖的原始类。

改变

class Coupon extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements
    \Magento\SalesRule\Model\Spi\CouponResourceInterface

进入

class Coupon extends \Magento\SalesRule\Model\ResourceModel\Coupon

但是不建议使用首选项,您可以尝试找到更好的方法。