Plugins Magento 2插件/拦截器访问和修改$this对象
我有一个插件,我想修改Magento 2中特定类中方法的功能,但是我不太确定如何访问原始对象并返回修改后的数据 原始方法 我已经设置了一个插件,用di.xml修改上述方法的功能:Plugins Magento 2插件/拦截器访问和修改$this对象,plugins,magento2,interceptor,Plugins,Magento2,Interceptor,我有一个插件,我想修改Magento 2中特定类中方法的功能,但是我不太确定如何访问原始对象并返回修改后的数据 原始方法 我已经设置了一个插件,用di.xml修改上述方法的功能: <type name="Magento\Sales\Block\Order\Totals"> <plugin disabled="false" name="Harrigo_EverDiscountLabel_Plugin_Magento_Sales_Block_Order_Totals" so
<type name="Magento\Sales\Block\Order\Totals">
<plugin disabled="false" name="Harrigo_EverDiscountLabel_Plugin_Magento_Sales_Block_Order_Totals" sortOrder="10" type="Harrigo\EverDiscountLabel\Plugin\Magento\Sales\Block\Order\Totals"/>
</type>
在插件中使用$subject而不是$this,但这对我来说不起作用。如何访问插件中的$this对象以添加/覆盖$this->_totals['discount'],并从插件中返回更新的$this对象。我有一个标准的首选项,但如果可能的话,我宁愿使用插件 我认为您应该在实现上述代码之前检查一下。 根据Magento2的devdocs,受保护的函数不能被拦截,所以我们不能使用插件 可能是这导致了您的问题。
希望这有帮助 哦,好吧,我没注意到。我只会坚持一个偏好。谢谢,只是出于兴趣,它说我在哪里找不到它?检查那篇文章中的限制。它说插件不能用于以下任何一种:非公共方法。啊,在顶部,我需要停止扫描这么快。谢谢你的帮助!
<type name="Magento\Sales\Block\Order\Totals">
<plugin disabled="false" name="Harrigo_EverDiscountLabel_Plugin_Magento_Sales_Block_Order_Totals" sortOrder="10" type="Harrigo\EverDiscountLabel\Plugin\Magento\Sales\Block\Order\Totals"/>
</type>
class Totals
{
public function after_initTotals(
\Magento\Sales\Block\Order\Totals $subject,
$result
) {
if ((double)$subject->getSource()->getDiscountAmount() != 0 OR $subject->getSource()->getDiscountDescription() != null) {
if ($subject->getSource()->getDiscountDescription()) {
$discountLabel = __('Offer (%1)', $source->getDiscountDescription());
} else {
$discountLabel = __('Offer');
}
$subject->_totals['discount'] = new \Magento\Framework\DataObject(
[
'code' => 'discount',
'field' => 'discount_amount',
'value' => $source->getDiscountAmount(),
'label' => $discountLabel,
]
);
}
return $subject;
}
}