我有一个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类,并且具有定义

的世代odicetagcode方法
public function beforeInfo($subject)
{
    var_dump(__METHOD__);
    exit;
}
. 但是,如果我注射记录器并尝试使用它

/* @var $psr `Psr\Log\LoggerInterface` */
$psr->info("This is a message");
.

消息将成功日志,但系统不调用我的插件方法。

是否有特殊的关于非插件能够的beforeInfo?如果没有,有人对调试插件配置问题有没有固体方法?

有帮助吗?

解决方案 2

经过一系列的研究,它会发现Psr\Log\LoggerInterface(及其底层混凝土生成的代码实现类) can 已插入。问题是,如果您拥有开发人员模式,则需要进行完整的DI编译(查看此错误)。运行

php bin/magento setup:di:compile
.

应该得到生成的拦截器,并将插件工作。

其他提示

PSR\Log\LoggerInterface不在magento模块或框架文件夹中。因此,它未被编译器分析,并且不会在生产模式中插入。如果要打入/配置第三方类的行为,则应使用适配器。

许可以下: CC-BY-SA归因
scroll top