플러그인에 대한 종속성 주입이 가능합니까?
-
13-12-2019 - |
문제
\ 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;
}
. 제휴하지 않습니다 magento.stackexchange