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



debug.log中的错误消息:

〔2020-11-10 07:57:17〕main。关键:创建对象时发生类型错误:Magento\SalesRule\Model\ResourceModel\Rule,传递给Magento\ SalesRule\Model\ ResourceModel\Rule::__construct((的参数3必须是Magento\SalesRule\Model\ResourceModel\Cupon的实例,给定RM\SameUponMultipleDiscounts\Model\ResourceModel \Cupon实例,在第116行的/home/rehan/lab/testrm/vender/magento/framework/ObjectManager/Factory/AbstractFactory.php中调用

我正在尝试覆盖:Magento\SalesRule\Model\ResourceModel\Cupon.php以删除"唯一优惠券"限制:

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

from construct((方法。

我的应用程序/code/Vvendor/Module/Model/ResourceModel/Cupon.php看起来像:

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace VendorModuleModelResourceModel;
use MagentoFrameworkModelAbstractModel;
/**
* SalesRule Resource Coupon
*
* @author      Magento Core Team <core@magentocommerce.com>
*/
class Coupon extends MagentoFrameworkModelResourceModelDbAbstractDb implements
MagentoSalesRuleModelSpiCouponResourceInterface
{
/**
* Constructor adds unique fields
*
* @return void
*/
protected function _construct()
{
$this->_init('salesrule_coupon', 'coupon_id');
}
}

我的di.xml文件看起来像:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="MagentoSalesRuleModelResourceModelCoupon" type="VendorModuleModelResourceModelCoupon" />
</config>

我已经尝试过清除缓存、生成文件夹并进行setup:di:compile,但我仍然收到同样的错误。

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

更改

class Coupon extends MagentoFrameworkModelResourceModelDbAbstractDb implements
MagentoSalesRuleModelSpiCouponResourceInterface

进入

class Coupon extends MagentoSalesRuleModelResourceModelCoupon

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

最新更新