Plugins Magento 2插件/拦截器访问和修改$this对象

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

我有一个插件,我想修改Magento 2中特定类中方法的功能,但是我不太确定如何访问原始对象并返回修改后的数据

原始方法 我已经设置了一个插件,用di.xml修改上述方法的功能:

<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;
    }
}