Magento2 plugin around listener not working
Question
I want to override a method from a Ui component which sets filter values. My Plugin code
<?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 returns
Fatal 500 Internal Server Error
And a message is outputted saying :
"Attention
Something went wrong."
What did go wrong is that the response of the ajax is empty when I inspect it.
Where is my mistake, Is this possible ?
Solution
parameters in aroundAddFilter of plugin must have like this
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);
}
Hope this will help you
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange