문제

\ Magento \ SalesRule \ Model \ Validator

을 확장 할 플러그인을 만들려고합니다.

은 매력처럼 작동하지만 문제는 magento \ salesrule \ model \ rulefactory

을 사용해야합니다.

플러그인 클래스에서 __constructor를 시도하고 Het Magento 2 개발자 가이드에 설명 된대로 종속성 주입을 통해 규칙 채유를 추가했습니다.

전체 "유효성 검사기"플러그인 클래스는 이제 다음과 같습니다.

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

그러나 이것은 항상 $ this-> 규칙 채 웁니다.

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를 사용해야합니다.

예, 지원됩니다. 샘플에서 function 키워드가 누락 된 것처럼 보입니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top