Neues Plugin-System: Doctrine Model Event Subscriber via services.xml funktioniert nicht

Ich versuche mich gerade am neuen 5.2 Plugin System und möchte mich auf ein Model Update-Event registrieren. Aber scheinbar greift der Listener nicht.

So sieht es bisher in etwa aus:

Resources/services.xml:

Subscriber/DocumentSubscriber.php:

class DocumentSubscriber implements EventSubscriber
{
    public function getSubscribedEvents()
    {
        return [
            'Shopware\Models\Order\Order::postUpdate' => 'onOrderUpdate',
        ];
    }

    public function onOrderUpdate(\Enlight_Event_EventArgs $arguments)
    {
        /** @var Order $order */
        $order = $arguments->get('entity');

        /** @var EntityManager $manager */
        $manager = $arguments->get('entityManager');

        echo "";
        print_r(Debug::dump($order, 3));
        print_r(Debug::dump($manager, 3));
        echo "";
        exit;
    }
}

Zuerst habe ich es mit mit dem Service Tag

probiert, aber das Doctrine Tag von http://symfony.com/doc/current/doctrine/event_listeners_subscribers.html ist vermutlich bei den Model-Events die richtige Wahl. Trotzdem bekomme ich keine Ausgabe beim Updaten einer Bestellung per API oder übers Backend.

Hat jemand eine Idee?

Hallo Carl,

du hast zwei Möglichkeiten.

  1. Du verwendest einen Shopware Event-Subscriber, dazu wird das tag  shopware.event_subscriber werdet und auch die getSubscribedEvents() methode wie in deinem Beispielcode
  2. Du verwendest einen Doctrine Event subscriber, dieser wird per  doctrine.event_subscriber registriert, der Subscriber sieht aber etwas anders aus, schaue dir dazu mal die Implementierung des OrderHistorySubscribers sowie dessen Registrierung im Service Container an.

 

 

Viele Grüße

Benjamin Cremer  Shopware

1 „Gefällt mir“

Danke, beide Varianten funktionieren! Warum es gestern nicht gekappt hat, kann leider nicht sagen.

Nabend,

ist zwar schon ein wenig älter der Thread, aber ich habe aktuell eine Frage dazu: Das ganze funktioniert ja nicht nach dem alten Pluginsystem. Also habe ich mich auf

" Shopware\Models\Order\Order::postUpdate" subscribed erhalte aber über die History nicht den korrekten vorherigen Status. Dieser ist immer „offen“.

Ich nutze das hier beschriebene Event: Shopware models

Hat evtl. irgendwer eine Idee dazu?

Danny

Hallo,

den Status vor Bestelländerung dürftest du über preUpdate erhalten. Bei postUpdate würde er ja schon geändert.

Beste Grüße 

Sebastian

Hi Sebastian,

guter HInweis. Habe das gerade getestet aber bekomme leider auch nur den Status „offen“ als alten Staus. :frowning:

Danny

Hallo,

dann ist der Status der Bestellung, bevor Sie gespeichert wird, auch “offen”.

Beste Grüße

Sebastian

Leider nicht. Ich habe den Status vorher geändert über das Backend auf “1. Mahnung”.

Danny