1

我为目录产品控制器的保存操作创建了拦截器

<type name="Magento\Catalog\Controller\Adminhtml\Product\Save">
    <plugin name="ricky_catalog_save_product"
            type="Ricky\Catalog\Plugin\Product\Save" sortOrder="10"
    />
</type>

我的插件类在下面

namespace Ricky\Catalog\Plugin\Product; 

class Save {
     public function afterExecute(
          \Magento\Catalog\Controller\Adminhtml\Product\Save $subject,
           $result)
    {
         $productId = $subject->productId; // This is not working

         /** $productId is provided in excute method in Save class 
            in Magento\Catalog\Controller\Adminhtml\Product\Save **/
    }
}

由于某些原因,我必须使用插件(拦截器设计模式),我知道我可以通过使用 catalog_product_save_after 事件的观察者来获得新创建的产品 ID。但请提供插件的解决方案。

感谢帮助 :)

4

2 回答 2

0

如果您正在访问属性 $subject->productId,这意味着它应该在类中定义

\Magento\Catalog\Controller\Adminhtml\Product\Save.

没有使用名称productId定义的类变量。

您可以覆盖控制器并再定义一个公共类变量

public $productId;

并在 execute() 方法中的某处分配产品 ID:-

$this->productId = $productId;

现在在您的插件中将其用作:-

$subject->productId

测试和工作..!!

于 2019-03-19T12:27:54.413 回答
0

可以通过这种方式获取产品Id

$productId = $subject->getRequest()->getParam('id');

希望这可以帮助 !!快乐编码

于 2020-07-07T08:20:05.940 回答