هل حقن التبعية ممكن للمكونات الإضافية؟
-
13-12-2019 - |
سؤال
أحاول إنشاء مكون إضافي لتوسيع \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.