Frage

Ich versuche ein Plugin zu erstellen, um den \ Magento \ SalesRule \ Model \ Validator zu erweitern

Das funktioniert wie ein Zauber, aber das Problem ist, dass ich Magento \ SalesRule \ Model \ RuleFactory verwenden muss

Ich habe versucht, einen __Konstruktor in der Plugin-Klasse zu erstellen und dort die Regelfabrik durch Abhängigkeitsinjektion hinzuzufügen, wie im Magento 2-Entwicklerhandbuch beschrieben, das so aussah:

Die gesamte Plugin-Klasse "Validator" sieht jetzt so aus:

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;
    }
}

dies würde jedoch immer nur null für $this->ruleFactory zurückgeben.

die di.xml-Dokument enthält Folgendes:

<?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>

Interessanterweise habe ich das im generierten Interceptor gefunden.php-Datei, in der der Konstruktor tatsächlich erstellt wurde.Aber es wird nie angerufen, kann mir jemand sagen, warum das so sein könnte?

War es hilfreich?

Lösung 3

Ich beschloss, mit der weniger sauberen Lösung zu gehen, und verwendete gerade eine statische Instanz des Objektmanagers und erhielt die Regelfabrik durch das

Andere Tipps

Verspätete Antwort, aber Sie müssen den generationspflichtigen Code in den __constructor ändern, und es funktioniert perfekt gut.Verwenden Sie nicht statischer ObjektManager, wenn möglich.Sie sollten stattdessen dI immer verwenden.

Ja, es wird unterstützt.Sieht aus wie in Ihrer Probe function schlüsselwort fehlt, versuchen Sie es:

public function __constructor(\Magento\SalesRule\Model\RuleFactory $ruleFactory){
    $this->ruleFactory = $ruleFactory;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top