Мадженто 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
класс реализации) может быть подключен.Проблема заключалась в том, что если у вас включен режим разработчика, вам нужно выполнить полную компиляцию (увидеть эту ошибку).Бег
php bin/magento setup:di:compile
должен сгенерировать перехватчики и запустить плагины.
Другие советы
PSR\Log\LoggerInterface
его нет в модуле magento или папке фреймворка.Поэтому он не анализируется компилятором и не будет плагинироваться в производственном режиме.Если вы хотите подключить/настроить поведение сторонних классов, вам следует использовать адаптер.