سؤال

أحاول إنشاء مكون إضافي لتوسيع \Magento\SalesRule\Model\Validator

وهو يعمل كالسحر، ولكن المشكلة هي أنني بحاجة إلى الاستفادة من Magento\SalesRule\Model uleFactory

لقد حاولت إنشاء __constructor في فئة البرنامج المساعد وإضافة RuleFactory هناك من خلال حقن التبعية كما هو موضح في دليل مطوري Magento 2 الذي بدا كما يلي:

تبدو فئة البرنامج المساعد "Validator" بأكملها الآن كما يلي:

class Validator{
    /**
     * @var \Magento\SalesRule\Model\RuleFactory
     */
    private $ruleFactory;

    /**
    * @param \Magento\SalesRule\Model\RuleFactory $ruleFactory
     */
    public function __constructor(\Magento\SalesRule\Model\RuleFactory $ruleFactory){
        $this->ruleFactory = $ruleFactory;
        error_log('validator constructed');
    }

    public function aroundInit(\Magento\SalesRule\Model\Validator $subject, $procede, $websiteId, $customerGroupId, $couponCode){
        //custom before code
        $return = $proceed($websiteId, $customerGroupId, $couponCode);
        //custom after code
        return $return;
    }
}

ولكن هذا سيعود فقط بقيمة null لـ $this->ruleFactory في جميع الأوقات.

يحتوي مستند di.xml على ما يلي:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <type name="\Magento\SalesRule\Model\Validator">
        <plugin name="ValidatorPlugin" type="\MAS\CouponAttempt\Model\SalesRule\Validator" sortOrder="1" disabled="false"/>
    </type>
    <type name="\MAS\CouponAttempt\Model\SalesRule\Validator">
        <arguments>
            <argument name="ruleFactoryInjection" xsi:type="object">Magento\SalesRule\Model\RuleFactory</argument>
        </arguments>
    </type>
</config>

ومن المثير للاهتمام أنني وجدت أنه في ملف Interceptor.php الذي تم إنشاؤه، تم إنشاء المُنشئ بالفعل.ولكن لم يتم الاتصال به أبدًا، هل يمكن لأحد أن يخبرني لماذا قد يكون هذا؟

هل كانت مفيدة؟

المحلول 3

قررت أن أذهب مع الحل الأقل نظيفة واستخدمت مثلا ثابتا لل ObjectManager وحصلت على مصنع القاعدة من خلال ذلك

نصائح أخرى

الإجابة متأخرة ولكن عليك التغيير __constructor ل __construct وسوف تعمل بشكل جيد تماما.لا تستخدم ObjectManager الثابت إن أمكن.يجب عليك دائمًا استخدام DI بدلاً من ذلك.

نعم، هو مدعوم. يبدو وكأنه في العينة الخاصة بك الكلمة الرئيسية في مفقود، حاول:

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top