php - 使用插件方法覆盖核心块
问题描述
我创建了一个模块,我在其中覆盖了产品列表小部件的核心功能。我可以使用首选项来实现这一点,但我想了解插件方法。下面是我的前端/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="Magento\CatalogWidget\Block\Product\ProductsList">
<plugin name="widget_product_listing_add_attribute" type="Test\CatalogWidget\Plugin\Block\Product\ProductsListAddAttributePlugin" sortOrder="1"/>
</type>
</config>
下面是我的插件块代码。
namespace Test\CatalogWidget\Plugin\Block\Product;
class ProductsListAddAttributePlugin
{
public function beforeCreateCollection(\Magento\CatalogWidget\Block\Product\ProductsList $subject, \Magento\Catalog\Model\ResourceModel\Product\Collection $result)
{
/**
* @var \Magento\CatalogWidget\Block\Product\ProductsList $subject
* @var \Magento\Catalog\Model\ResourceModel\Product\Collection $result
*/
die('ProductsListAddAttributePlugin before....');
}
}
安装模块并运行 di:compile.. 后,当我重新加载页面时,出现以下错误。
致命错误:未捕获的 ArgumentCountError:函数 Test\CatalogWidget\Plugin\Block\Product\ProductsListAddAttributePlugin::beforeCreateCollection() 的参数太少,1 在 C:\xampp\htdocs\projects\hello\vendor\magento\framework\Interception\ 中传递第 121 行的 Interceptor.php 和 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):
第 6 行 C:\xampp\htdocs\projects\hello\app\code\Test\CatalogWidget\Plugin\Block\Product\ProductsListAddAttributePlugin.php 中的 Mag
解决方案
尝试删除生成的代码,我认为您在 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
推荐阅读
- javascript - 从 file:// 运行 Svelte 应用程序,无需服务器
- python - 具有多个 StyledItemDelegateForColumn 的 QAbstractTableModel 和 QTableView 使我的应用程序崩溃
- algorithm - 如何找到边权重总和最大的最小路径?
- python - 如何从文本文件中随机隐藏单词
- r - 使用 R 中 2 个不同数据帧的列变量进行 T 测试
- angular - 如何在带有关键帧的动画项目中正确创建和构造?
- c++-cli - 如何在遍历GetProcessByName时使用for循环而不是foreach循环
- javascript - HTTP 请求完成并在 Angular 中渲染后调用 JS 函数
- r - R逻辑问题:较长的对象长度不是较短对象长度的倍数( dplyr::if_else() )
- javascript - 如何为 REACT INFINITE 中的每个页面仅发出一次 API 请求滚动此处