Overriding Magento_SalesRule ResourceModel by preferences throws error: Type Error occurred when creating object
Overriding Magento_SalesRule ResourceModel by preferences throws error: Type Error occurred when creating object
debug.log 中的错误消息:
[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 [] []
我正在尝试覆盖:Magento\SalesRule\Model\ResourceModel\Coupon。php 以删除 'unique coupon' 限制:
$this->addUniqueField(['field' => 'code', 'title' => __('Coupon with the same code')]);
来自 construct() 方法。
我的 app/code/Vendor/Module/Model/ResourceModel/Coupon.php 看起来像:
<?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');
}
}
我的 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="Magento\SalesRule\Model\ResourceModel\Coupon" type="Vendor\Module\Model\ResourceModel\Coupon" />
</config>
我已尝试清除缓存、生成文件夹并执行 setup:di:compile 但我仍然收到相同的错误。
你应该让你的覆盖 class 扩展原来的 class 这样另一个原生的 class 依赖注入原来的 class 可以识别你的覆盖。
改变
class Coupon extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements
\Magento\SalesRule\Model\Spi\CouponResourceInterface
进入
class Coupon extends \Magento\SalesRule\Model\ResourceModel\Coupon
但不推荐使用首选项,您可以尝试寻找更好的方法。
debug.log 中的错误消息:
[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 [] []
我正在尝试覆盖:Magento\SalesRule\Model\ResourceModel\Coupon。php 以删除 'unique coupon' 限制:
$this->addUniqueField(['field' => 'code', 'title' => __('Coupon with the same code')]);
来自 construct() 方法。
我的 app/code/Vendor/Module/Model/ResourceModel/Coupon.php 看起来像:
<?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');
}
}
我的 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="Magento\SalesRule\Model\ResourceModel\Coupon" type="Vendor\Module\Model\ResourceModel\Coupon" />
</config>
我已尝试清除缓存、生成文件夹并执行 setup:di:compile 但我仍然收到相同的错误。
你应该让你的覆盖 class 扩展原来的 class 这样另一个原生的 class 依赖注入原来的 class 可以识别你的覆盖。
改变
class Coupon extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements
\Magento\SalesRule\Model\Spi\CouponResourceInterface
进入
class Coupon extends \Magento\SalesRule\Model\ResourceModel\Coupon
但不推荐使用首选项,您可以尝试寻找更好的方法。