Перезапись основного блока с помощью метода плагина - PullRequest
0 голосов
/ 28 марта 2019

Я создал модуль, в котором перезаписываю основные функции виджета со списком товаров.Я могу добиться этого, используя предпочтения, но я хочу понять метод плагина. Ниже приведен мой код для frontend / 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 .. при перезагрузке страницы появляется ошибка ниже.

Неустранимая ошибка: Uncaught ArgumentCountError: Слишком мало аргументов для функции 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 (Объект (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 \ generate \ code \ Magento \ CatalogWidget \ Block \ Product \ ProductsList \ Interceptor.php (26):

Mag in C: \ xampp \ htdocs \ projects \ hello \ app \ code \ Test \ CatalogWidget \ Plugin \ Block \ Product \ ProductsListAddAttributePlugin.php в строке 6

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Попробуйте удалить сгенерированный код. Я думаю, что работая в 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
0 голосов
/ 28 марта 2019

Вы запускаете setup:di:compile и очищаете кеш?после обновления метода beforeCreateCollection?

Похоже, вы правильно передаете два аргумента, но это может относиться к старому DI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...