magento2中的Plugin机制--around方法详解

around插件围绕观察到的方法运行,使我们能够在原始方法调用前后运行一些代码。这是一个非常强大的概念,因为我们可以更改传入的参数以及函数的返回值。

在编写around插件时,有几个关键点需要记住:

传递给插件的第一个参数是观察到的类型实例。进入插件的第二个参数是可调用/Closure。通常,此参数的类型和名称为可调用$proceed。

我们必须确保将与原始方法签名相同的参数转发到此可调用对象。

所有其他参数都是原始观察到的方法的参数。插件必须返回与原始函数相同的值,理想情况下返回$proceed(…)或$returnValue=$processed();

然后是$returnValue;对于需要修改$returnValue的情况。

让我们来看看Magento的一个插件实现,该实现在<Magento_DIR>模块分组产品/etc/di.xml文件中指定:

<type name="Magento\Catalog\Model\ResourceModel\Product\Link">
    <plugin name="groupedProductLinkProcessor" type="Magento\GroupedProduct\Model\ResourceModel\Product\Link\RelationPersister" />
</type>

此插件的原始方法以Magento\Catalog\Model\ResourceModel\Product\Link类的deleteProductLink方法为目标:

public function deleteProductLink($linkId) {
    return $this - > getConnection() - > delete($this - > getMainTable(), ['link_id = ?' => $linkId]);
}

around插件的实现是通过Magento\GroupedProduct\Model\ResourceModel\Product\Link\RelationPersister类的aroundDeleteProductLink方法提供的

如以下部分示例所示:

function aroundDeleteProductLink(\Magento\ GroupedProduct\ Model\ ResourceModel\ Product\ Link $subject, \Closure $proceed, $linkId) 
{ // The rest of the code...    $result = $proceed($linkId);    // The rest of the code...    return $result;
本内容转载自maxiaoke.com,magento专区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值