마젠토 2:`Psr\Log\LoggerInterface` 유형의 플러그인을 사용할 수 있습니까?
-
13-12-2019 - |
문제
다음과 같은 di.xml이 있습니다.
<config>
<type name="Psr\Log\LoggerInterface">
<plugin name="namespace_modulename_plugins_psr"
type="Namespace\Modulename\Plugins\Psr"
sortOrder="10"
disabled="false"/>
</type>
</config>
그만큼 Namespace\Modulename\Plugins\Psr
클래스는 인스턴스화될 수 있으며 beforeInfo
정의된 메소드
public function beforeInfo($subject)
{
var_dump(__METHOD__);
exit;
}
그런데 로거를 주입해서 사용하려고 하면
/* @var $psr `Psr\Log\LoggerInterface` */
$psr->info("This is a message");
메시지는 성공적으로 기록되지만 시스템이 내 플러그인 메소드를 호출하지 않습니다.
뭔가 특별한 게 있는 걸까 Psr\Log\LoggerInterface
그러면 플러그인을 사용할 수 없나요?그렇지 않다면 플러그인 구성 문제를 디버깅하기 위한 확실한 방법론을 갖고 있는 사람이 있습니까?
해결책 2
약간의 연구 끝에 밝혀진 사실은 다음과 같습니다. Psr\Log\LoggerInterface
(그리고 그 기본 콘크리트 Monolog
구현 클래스) ~할 수 있다 연결됩니다.문제는 개발자 모드를 활성화한 경우 전체 di 컴파일(이 버그를 참조하세요).달리기
php bin/magento setup:di:compile
인터셉터가 생성되고 플러그인이 작동해야 합니다.
다른 팁
PSR\Log\LoggerInterface
magento 모듈이나 프레임워크 폴더에 없습니다.따라서 컴파일러로 분석되지 않으며 프로덕션 모드에서 플러그인되지 않습니다.타사 클래스의 동작을 플러그인/구성하려면 어댑터를 사용해야 합니다.
제휴하지 않습니다 magento.stackexchange