# Event dass bei allen Artikel Änderung getriggert wird

**URL:** <https://forum.shopware.com/t/event-dass-bei-allen-artikel-anderung-getriggert-wird/45828>\
**Category:** Programmierung\
**Created:** [18. Mai 2017 um 06:56 UTC](https://forum.shopware.com/t/event-dass-bei-allen-artikel-anderung-getriggert-wird/45828 "2017-05-18T06:56:19Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![derwunner](https://avatars.discourse-cdn.com/v4/letter/d/e5b9ba/32.png) [@derwunner](https://forum.shopware.com/u/derwunner)\
**Post date:** [18. Mai 2017 um 06:56 UTC](https://forum.shopware.com/t/event-dass-bei-allen-artikel-anderung-getriggert-wird/45828/1 "2017-05-18T06:56:19Z")

</div>

Hallo Leute,

&nbsp;

eine Frage: Gibt es ein Event, dass bei allen Artikel Änderungen (CRUD) getriggert wird? Ich brauche das für ein Plugin und denke, dass ich nun nach und nach alle backend und api Actions erwischt habe.

&nbsp;

&nbsp;

MFG

&nbsp;

derwunner

---

<div class="post-metadata">

**Author:** ![ahmadsaad](https://avatars.discourse-cdn.com/v4/letter/a/65b543/32.png) [@ahmadsaad](https://forum.shopware.com/u/ahmadsaad)\
**Post date:** [19. Mai 2017 um 22:35 UTC](https://forum.shopware.com/t/event-dass-bei-allen-artikel-anderung-getriggert-wird/45828/2 "2017-05-19T22:35:55Z")

</div>

Hallo,

du darfst diese Controller hock &nbsp;[shopware/Article.php at 5.2 · shopware/shopware · GitHub](https://github.com/shopware/shopware/blob/5.2/engine/Shopware/Controllers/Backend/Article.php)

ich glaube du kannst diese event Enlight\_Controller\_Action\_PostDispatch\_Backend\_Article&nbsp; benutzen und dann überprüfen welche action ist die aktulle action.

VG,

Ahmad

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [20. Mai 2017 um 09:58 UTC](https://forum.shopware.com/t/event-dass-bei-allen-artikel-anderung-getriggert-wird/45828/3 "2017-05-20T09:58:37Z")

</div>

Hi,

du kannst auch die Lifecycle-Events des ORM benutzen. Entweder direkt die entsprechenden Doctrine-Events (siehe Doctrine Doku) oder die Events, die Shopware dazu feuert, vgl&nbsp;engine/Shopware/Components/Model/EventSubscriber.php

Das greift zwar “nur” für Änderungen, die über das ORM geschehen, damit triffst du aber auf jeden Fall API-Änderungen und Backend-Änderungen durch das Artikelmodul.

Besten Gruß,

Daniel

---

<div class="post-metadata">

**Author:** ![derwunner](https://avatars.discourse-cdn.com/v4/letter/d/e5b9ba/32.png) [@derwunner](https://forum.shopware.com/u/derwunner)\
**Post date:** [22. Mai 2017 um 06:23 UTC](https://forum.shopware.com/t/event-dass-bei-allen-artikel-anderung-getriggert-wird/45828/4 "2017-05-22T06:23:08Z")

</div>

Prinzipiell geht es mir darum, dass ich im Frontend für das Listing einen Aggregat Query ausführe, den ich bereits schon gecacht habe. Ich müsste jetzt nur noch an den richtigen Stellen den Cache invalidieren.

Mein Code dazu sieht bisher so aus:

```
public static function getSubscribedEvents()
{
    return [
        'Enlight_Controller_Action_PostDispatch_Backend_Article' => 'onArticleSave',
        'Enlight_Controller_Action_PostDispatch_Api_Article' => 'onArticleSave',
        'Enlight_Controller_Action_PostDispatch_Backend_Category' => 'onArticleSave'
    ];
}

public function onArticleSave(\Enlight_Event_EventArgs $args)
{
    /**
     * @var \Zend_Cache_Core $cache
     */
    $cache = $this->container->get('cache');
    $cache->clean(\Zend_Cache::CLEANING_MODE_OLD);

    list($controller, $view, $request) = self::getEverythingFromArgs($args);

    $actionName = strtolower($request->getActionName());

    $invalidatingActions = array(
        'save', // api and backend
        'delete', // api and backend
        'deletevariants',
        'deletedetail',
        'post', // api and backend
        'put', // api and backend
        'removecategoryarticles',
        'addcategoryarticles'
    );

    if (in_array($actionName, $invalidatingActions)) {
        $cacheIds = $cache->getIdsMatchingTags(array(self::ART_CNT_CACHE_TAG));

        if (is_array($cacheIds) && count($cacheIds) <= 1) {
            foreach ($cacheIds as $cacheId) {
                if (!$cache->remove($cacheId)) {
                    throw new \RuntimeException('Cache konnte nicht geleert werden. Artikel Anzahl in der Auflisting ist wahrscheinlich falsch.');
                }
            }
        }
    }
}

```

Vielleicht gibt es auch eine andere Möglichkeit mein Problem zu lösen. Zusammenfassend lässt sich denke ich sagen, dass ich Doctrine, sArticle, Backend, Api, und Elasticsearch abfangen muss, oder?
