我想从UI组件覆盖方法,该方法设置过滤器值。 我的插件代码

<?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的响应是空的。

我的错误在哪里,这是可能的吗?

有帮助吗?

解决方案

CallinDFilter中的参数必须具有此

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);
}
.

希望这将帮助您

许可以下: CC-BY-SA归因
scroll top