Мадженто 2:Можете ли вы использовать плагин типа Psr\Log\LoggerInterface?

magento.stackexchange https://magento.stackexchange.com//questions/93046

Вопрос

У меня есть файл 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 класс реализации) может быть подключен.Проблема заключалась в том, что если у вас включен режим разработчика, вам нужно выполнить полную компиляцию (увидеть эту ошибку).Бег

php bin/magento setup:di:compile

должен сгенерировать перехватчики и запустить плагины.

Другие советы

PSR\Log\LoggerInterface его нет в модуле magento или папке фреймворка.Поэтому он не анализируется компилятором и не будет плагинироваться в производственном режиме.Если вы хотите подключить/настроить поведение сторонних классов, вам следует использовать адаптер.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top