Magento 2 – Category Save Event Not Called When Saving Category via REST API

event-observermagento2rest

I have created one observer CategorySaveAfter.php file in my custom module.

And calling this observer on catalog_category_save_after event define in events.xml

But somehow its not calling when i save category using restApi

Its working fine when i save category from magento2 backend it calling observer staightforward.

But for Rest APi its not working .

Below code i have tried :

Vendor/Module/etc/adminhtml/events.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="catalog_category_save_after">
        <observer name="catalog_megamenu" instance="Vendor\ModuleName\Observer\CategorySaveAfter" />
    </event>
</config>

Vendor/Module/Observer/Categorysaveafter.php

<?php
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Vendor\ModuleName\Observer;

use Magento\Catalog\Model\Category;
use Magento\Framework\Event\ObserverInterface;

class Categorysaveafter implements ObserverInterface
{
    protected $test;

    public function __construct(\Vendor\Modulename\Model\ModelFactory $testMenu)
    {
        $this->test = $testMenu;
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        echo "goes here";exit;       
    }
}

Yes i have added registration.php and module.xml file as well.

Update :

Forgot to mention that i have tried global level events.xml as well . Like etc/events.xml and etc/webapi_rest/events.xml . Still both way its not calling

Your help will be appreciated.

Best Answer

You have to override core CategoryRepository.php file to changes your custom requirement.

app/code/Package/Modulename/etc/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Model\CategoryRepository">
        <plugin name="CategoryRepositoryRestPim" type="Package\Modulename\Model\CategoryRepository" />
   </type>
</config>

Inside app/code/Package/Modulename/Model/CategoryRepository.php,

<?php    
namespace Package\Modulename\Model;

class CategoryRepository 
{

 public function afterSave(\Magento\Catalog\Model\CategoryRepository $subject,$result)
    {
        var_dump($result->getData());
        $categoryId = $result->getId(); //get category id 
    }
}

Remove var/generation folder and check again.

Related Topic