如何改写类中的protected方法?around
首先,不太清楚你的问题。但是如果你是想重写某一个方法的话,除了Abstruct方法/类除外。
都可以在di.xml里面来声明重写
Plugin 是你不通过重写来修改某个方法的行为。如果你是想单纯改写,preference比较推荐。
2 个赞
1 个赞
Plugin可以用于这种情况的。如果你要操作的对象是abstruct class
1 个赞
希望你完整解决之后,自己再完整回答一下这个提问.
这样能帮助更多的朋友.
1 个赞
我想要修改
我的项目\vendor\magento\module-catalog\Model\Layer\Filter\AbstractFilter.php
这个类下面的isOptionReducesResults方法
protected function isOptionReducesResults($optionCount, $totalSize)
{
return $optionCount < $totalSize;
}
我的修改方式如下:
1、我的项目\app\code\Gos\MagentoCatalogEnhance\etc\di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Catalog\Model\Layer\Filter\AbstractFilter" type="Gos\MagentoCatalogEnhance\Plugin\Layer\Filter\AbstractFilter" />
</config>
2、我的项目\app\code\Gos\MagentoCatalogEnhance\Plugin\Layer\Filter\AbstractFilter.php
<?php
namespace Gos\MagentoCatalogEnhance\Plugin\Layer\Filter;
abstract class AbstractFilter extends \Magento\Framework\DataObject implements FilterInterface
{
protected function isOptionReducesResults($optionCount, $totalSize)
{
return $optionCount <= $totalSize;
}
}
但是没有生效,请问哪里不对要修改,求帮助。
我前面已经说过了,abstruct的方法和类不能用
<preference for="Magento\Catalog\Model\Layer\Filter\AbstractFilter" type="Gos\MagentoCatalogEnhance\Plugin\Layer\Filter\AbstractFilter" />
的形式重写