#php #magento2 #magento-2.3
#php #magento2 #magento-2.3
Вопрос:
Сообщение об ошибке в debug.log:
[2020-11-10 07:57:17] главная.КРИТИЧЕСКИЙ: ошибка типа произошла при создании объекта: MagentoSalesRuleModelResourceModelRule, аргумент 3, переданный MagentoSalesRuleModelResourceModelRule::__construct() должен быть экземпляром MagentoSalesRuleModelResourceModelCoupon, экземпляром RMSameCouponMultipleDiscountsModelResourceModel Купон задан, вызывается в /home/rehan/lab/testrm/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php в строке 116 [] []
Я пытаюсь переопределить: MagentoSalesRuleModelResourceModelCoupon.php чтобы снять ограничение на «уникальный купон»:
$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 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, но я все еще получаю ту же ошибку.
Ответ №1:
Вы должны сделать так, чтобы ваш переопределенный класс расширял исходный класс, чтобы другие собственные классы, которые являются исходным классом для внедрения зависимостей, могли распознать ваш переопределенный класс.
Изменить
class Coupon extends MagentoFrameworkModelResourceModelDbAbstractDb implements
MagentoSalesRuleModelSpiCouponResourceInterface
в
class Coupon extends MagentoSalesRuleModelResourceModelCoupon
Но использование настроек не рекомендуется, вы можете попытаться найти лучший способ.
Комментарии:
1. Спасибо, Джеймс, это действительно было исправлением для расширения исходного класса. Могу ли я узнать, почему не рекомендуется использовать настройки?
2. Использование настроек затрудняет обновление и поддержку класса. Если вы обновите собственную версию Magento, это может привести к конфликту. Если вы установите другие расширения, которые должны будут перехватывать в этом классе, это тоже приведет к конфликту.