Плагин Magento2 вокруг слушателя не работает


Я хочу переопределить метод из компонента пользовательского интерфейса, который задает значения фильтра. Мой код плагина

<?php 

namespace MyVendor\MyModule\Plugins\DataProvider\Product;

class GiftProvider
{
    public function aroundAddFilter(
          $subject,  
          \Closure  $proceed, 
          \Magento\Framework\Api\Filter $filter
    )
    {
        if (isset($subject->addFilterStrategies[$filter->getField()])) {
            $subject->addFilterStrategies[$filter->getField()]
            ->addFilter(
                    $subject->getCollection(),
                    $filter->getField(),
                    [$filter->getConditionType() => $filter->getValue()]
            );
        } else {
            $abstractProvider::addFilter($filter);
        }

        if(!isset($subject->addFilterStrategies['is_gift']))
        {
            $subject->addFilterStrategies['is_gift']
                ->addFilter(
                    $subject->getCollection(),
                    'is_gift',
                    [$filter->getConditionType() => 1]);
        }
        return $subject;
    }

}

Etc/adminhtml/di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Ui\DataProvider\Product\ProductDataProvider">
        <plugin name="gift_data_provider_around_plugin" type="MyVendor\MyModule\Plugins\DataProvider\Product\GiftProvider" sortOrder="1500" />
    </type>
</config>

Ajax возвращает

Fatal 500 Internal Server Error

И выводится сообщение, в котором говорится:

"Attention
Something went wrong."

Что пошло не так, так это то, что ответ ajax пуст, когда я его проверяю.

В чем моя ошибка, возможно ли это?

Author: Lachezar Raychev, 2016-02-28

1 answers

Параметры в окружающем фильтре плагина должны быть такими

public function aroundAddFilter(
   \Magento\Catalog\Ui\DataProvider\Product\ProductDataProvider $subject,  
   \Closure $proceed, 
   \Magento\Framework\Api\Filter $filter,
   \Magento\Ui\DataProvider\AbstractDataProvider $abstractProvider
)
{
  //body code
  return $proceed($abstractProvider);
}

Надеюсь, это поможет вам

 1
Author: mrtuvn, 2016-02-28 17:04:28