使用插件方法覆盖核心块



我创建了一个模块,在其中我正在覆盖产品列表小部件的核心功能。我可以使用首选项来实现这一点,但我想了解插件方法。 下面是我的前端/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">
<type name="MagentoCatalogWidgetBlockProductProductsList">
<plugin name="widget_product_listing_add_attribute" type="TestCatalogWidgetPluginBlockProductProductsListAddAttributePlugin" sortOrder="1"/>
</type>
</config>

下面是我的插件块代码。

namespace TestCatalogWidgetPluginBlockProduct;
class ProductsListAddAttributePlugin
{
public function beforeCreateCollection(MagentoCatalogWidgetBlockProductProductsList $subject, MagentoCatalogModelResourceModelProductCollection $result)
{
/**
* @var MagentoCatalogWidgetBlockProductProductsList $subject
* @var MagentoCatalogModelResourceModelProductCollection $result
*/
die('ProductsListAddAttributePlugin before....');

}
}

安装模块并运行 di:compile.. 当我重新加载页面时,出现以下错误。

致命错误:

未捕获的参数计数错误:参数太少 功能 Test\CatalogWidget\Plugin\Block\Product\ProductsListAddAttributePlugin::beforeCreateCollection(), 1 传入 C:\xampp\htdocs\projects\hello\vendor\magento\framework\Interception\Interceptor.php 在第 121 行和预期的正好 2 C:\xampp\htdocs\projects\hello\app\code\Test\CatalogWidget\Plugin\Block\Product\ProductsListAddAttributePlugin.php:6 堆栈跟踪:#0 C:\xampp\htdocs\projects\hello\vendor\magento\framework\Interception\Interceptor.php(121): Test\CatalogWidget\Plugin\Block\Product\ProductsListAddAttributePlugin->beforeCreateCollection(Object(Magento\CatalogWidget\Block\Product\ProductsList\Interceptor))

1 C:\xampp\htdocs\projects\hello\vendor\magento\framework\Interception\Interceptor.php(153):

Magento\CatalogWidget\Block\Product\ProductsList\Interceptor->Magento\Framework\Interception{closure}()

2 C:\xampp\htdocs\projects\hello\generated \code\Magento\CatalogWidget\Block\Product\ProductsList\Interceptor.php(26):

马格在 C:\xampp\htdocs\projects\hello\app\code\Test\CatalogWidget\Plugin\Block\Product\ProductsListAddAttributePlugin.php 在第 6 行

您是否运行setup:di:compile并清除缓存? 更新beforeCreateCollection方法后?

看起来您正确地传递了两个参数,但它可能指的是较旧的 DI。

尝试删除生成的代码 我认为您在 Windows 下工作,您可以在提示符终端上运行以下命令。 首先确保您处于开发人员模式下

php bin/magento deploy:mode:set developer
php rm -rf generated*
php bin/magento cache:flush
php bin/magento cache:clean
php bin/magento setup:upgrade
bin/magento setup:di:compile

最新更新