如何在Magento 2中使用After插件(Interceptor)时获取新创建的产品ID

时间:2019-03-17 13:13:55

标签: magento plugins magento2 interceptor magento-2.3

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

<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。但是请提供插件解决方案。

感谢帮助:)

2 个答案:

答案 0 :(得分:0)

如果要访问属性$ subject-> productId,则意味着应在类

中定义它
\Magento\Catalog\Controller\Adminhtml\Product\Save.

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

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

public $productId;

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

$this->productId = $productId;

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

$subject->productId

经过测试,正在工作.. !!

答案 1 :(得分:0)

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

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

希望这会有所帮助!快乐编码