Domanda

Sto cercando di creare un plug-in per estendere il \ magento \ salestrule \ modello \ validator

Che funziona come un fascino, ma il problema è necessario utilizzare Magento \ Salestrufo \ Model \ Rulefactory

Ho provato a fare un __constructor nella classe Plugin e aggiungendo la Rulefactory attraverso l'iniezione di dipendenza come descritto nella Guida agli sviluppatori Het Magento 2 che sembrava questo:

L'intera classe Plugin "validator" è ora simile a questo:

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

Ma questo restituirebbe solo NULL per $-> Rulefactory in ogni momento.

Il documento DI.XML contiene quanto segue:

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

Abbastanza interessante di aver trovato che nel file interceptor.php generato il costruttore è effettivamente fatto.Ma non è mai chiamato, qualcuno può dirmi perché questo potrebbe essere?

È stato utile?

Soluzione 3

Ho deciso di andare con la soluzione meno pulita e ho appena usato un'istanza statica dell'oggettoManager e ha ottenuto la fabbrica di regole attraverso quella

Altri suggerimenti

Risposta tardiva Ma è necessario modificare __constructor in __construct e funzionerà perfettamente bene.Non utilizzare l'oggetto statico, se possibile.Dovresti sempre usare DI invece.

Sì, è supportato. Sembra che sia nella tua chiave function, prova:

public function __constructor(\Magento\SalesRule\Model\RuleFactory $ruleFactory){
    $this->ruleFactory = $ruleFactory;
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top