문제

다음과 같은 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 모듈이나 프레임워크 폴더에 없습니다.따라서 컴파일러로 분석되지 않으며 프로덕션 모드에서 플러그인되지 않습니다.타사 클래스의 동작을 플러그인/구성하려면 어댑터를 사용해야 합니다.

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