# SubscribeEvent in Update-Funktion

**URL:** https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270
**Category:** Programmierung
**Created:** [10. November 2016 um 17:18 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270 "2016-11-10T17:18:44Z")
**Posts on this page:** 16
**Page:** 1

<div class="post-metadata">

### Author: ![mbdus](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mbdus/32/12997_2.png) [@mbdus](https://forum.shopware.com/u/mbdus)
#### Post date: [10. November 2016 um 17:18 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/1 "2016-11-10T17:18:44Z")

</div>

Hallo Community,

ich wundere mich, dass ich nicht neue Subcribes in der Update-Funktion registrieren kann. Soll das so sein?

D.h. bei mir sieht das so aus:

```
public function install(){
    $this->registerEvents();
    return true;
}

public function update(){
    $this->registerEvents();
    return true;
}

public function registerEvents(){
    $this->subscribeEvent ( 'Enlight_Controller_Action_PostDispatch_Backend_Article', 'onPostDispatchBackendArticle' );
}

```

Bei einem Update im Pluginmanager wird das Event nicht registriert, bei de- und installieren schon. Was mache ich falsch?

Grüße

Mathias

---

<div class="post-metadata">

### Author: ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)
#### Post date: [10. November 2016 um 17:44 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/2 "2016-11-10T17:44:17Z")

</div>

> [@mbdus schrieb:](https://forum.shopware.com/profile/14942/mbdus "mbdus")
> 
> Hallo Community,
> 
> ich wundere mich, dass ich nicht neue Subcribes in der Update-Funktion registrieren kann. Soll das so sein?
> 
> D.h. bei mir sieht das so aus:
> 
> public function install(){  
> $this-\>registerEvents();  
> return true;  
> }
> 
> public function update(){  
> $this-\>registerEvents();  
> return true;  
> }
> 
> public function registerEvents(){  
> $this-\>subscribeEvent ( ‚Enlight\_Controller\_Action\_PostDispatch\_Backend\_Article‘, ‚onPostDispatchBackendArticle‘ );  
> }
> 
> Bei einem Update im Pluginmanager wird das Event nicht registriert, bei de- und installieren schon. Was mache ich falsch?
> 
> Grüße
> 
> Mathias

Hallo,

das klappt problemlos, beispielsweise über:

```
public function update($version){
	switch($version) {
		case '1.0.1':	
			$this->subscribeEvent(
				'Enlight_Controller_Action_PreDispatch_Frontend_Detail', 
				'onPreDispatchDetail'
			);

			break;
	}	

	return true;
}

```

Beste Grüße

Sebastian

---

<div class="post-metadata">

### Author: ![mbdus](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mbdus/32/12997_2.png) [@mbdus](https://forum.shopware.com/u/mbdus)
#### Post date: [11. November 2016 um 07:25 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/3 "2016-11-11T07:25:03Z")

</div>

Danke für die Info. Dann muss bei mir woanders hängen. Ich schaue es mir nochmal an.

---

<div class="post-metadata">

### Author: ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)
#### Post date: [11. November 2016 um 07:44 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/4 "2016-11-11T07:44:34Z")

</div>

Ich würde nach der Installation den config Cache leeren lassen, daran kann es liegen.

PS: in der Update solltest du nur neue Events drin haben wenn du sie doppelt subscribst, wird es mehrfach ausgeführt

---

<div class="post-metadata">

### Author: ![mbdus](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mbdus/32/12997_2.png) [@mbdus](https://forum.shopware.com/u/mbdus)
#### Post date: [11. November 2016 um 08:48 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/5 "2016-11-11T08:48:56Z")

</div>

Ich habe das Problem gefunden.

In meiner Update-Funktion werden zwar neue Events registriert, aber keine entfernt, wenn ein Event wegfällt. Die Install-Methode kann das jedoch. Gibt es dafür auch etwas? Soetwas wie unsubscribe? Notfalls würde ich es in der Datenbank (s\_core\_subscribes) per SQL entfernen.

Grüße

Mathias

---

<div class="post-metadata">

### Author: ![Heiner\_Lohaus](https://avatars.discourse-cdn.com/v4/letter/h/b5a626/32.png) [@Heiner\_Lohaus](https://forum.shopware.com/u/Heiner_Lohaus)
#### Post date: [11. November 2016 um 09:09 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/6 "2016-11-11T09:09:22Z")

</div>

Hi Mathias,

ich kann dir das neue Plugin System empfehlen.  
Dort werden die Events nicht mehr in der Datenbank abgelegt  
und so hätte man auch das Problem nicht.

[https://developers.shopware.com/developers-guide/plugin-system/#pluginbootstrap-as-event-subscriber](https://developers.shopware.com/developers-guide/plugin-system/#pluginbootstrap-as-event-subscriber)

Gruß Heiner

---

<div class="post-metadata">

### Author: ![mbdus](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mbdus/32/12997_2.png) [@mbdus](https://forum.shopware.com/u/mbdus)
#### Post date: [11. November 2016 um 09:16 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/7 "2016-11-11T09:16:43Z")

</div>

Im neuen Plugin-System habe ich die unsubscribe-Funktion auch gerade gefunden. Was mache ich mit den Versionen kleiner SW5.2 und SW4? Dann ist das Plugin nicht mehr kompatibel. Ein umstellen ist aus diesem Grund leider noch nicht möglich.

---

<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: [11. November 2016 um 09:23 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/8 "2016-11-11T09:23:18Z")

</div>

Hallo Mathias,

Heiners Lösung, Benuzten die neue Plugin System jetzt ist gut Idee.

mit die alte System, Propieren Sie mal dise Code:

```
        $event = 'Ihre Event';
        $listener = 'Ihre Plugin Function';
        $namespace = $this->Collection();
        $handler = new Enlight_Event_Handler_Plugin(
            $event, $namespace, $this, $listener
        );
        $namespace->Subscriber()->removeListener($handler);

```

Proiern Sid das Code, und ertzehlen mir ob es funktioniert.

Viele Grüße,

Ahmad

---

<div class="post-metadata">

### Author: ![mbdus](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mbdus/32/12997_2.png) [@mbdus](https://forum.shopware.com/u/mbdus)
#### Post date: [11. November 2016 um 10:25 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/9 "2016-11-11T10:25:04Z")

</div>

Hallo Ahmad,

ja, so habe ich es mir auch vorgestellt, eine eigene unsubscribeEvent-Funktion mit deinem Code. Leider funktioniert es nicht. Das Event steht immer noch in der DB-Tabelle s\_core\_subscribes und wird ausgeführt.

Grüße

Mathias

&nbsp;

---

<div class="post-metadata">

### Author: ![mbdus](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mbdus/32/12997_2.png) [@mbdus](https://forum.shopware.com/u/mbdus)
#### Post date: [11. November 2016 um 13:14 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/10 "2016-11-11T13:14:12Z")

</div>

Das unsubscribe würde funktionieren, wenn in der update-Funktion kein return true am Ende stehen würde…

---

<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: [11. November 2016 um 13:23 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/11 "2016-11-11T13:23:46Z")

</div>

> [@mbdus schrieb:](https://forum.shopware.com/profile/14942/mbdus "mbdus")
> 
> Hallo Ahmad,
> 
> ja, so habe ich es mir auch vorgestellt, eine eigene unsubscribeEvent-Funktion mit deinem Code. Leider funktioniert es nicht. Das Event steht immer noch in der DB-Tabelle s\_core\_subscribes und wird ausgeführt.
> 
> Grüße
> 
> Mathias
> 
> &nbsp;

Ja ich habe das Code nochmal überprüfet und meine Code nur löchen der Handler von listner Array, aber nicht von Datenbank.

wie ich sehe, Sie dürfen ein Sql beuntzen , um diese Handler direkt von der Datenbank zu löchen.

Viele Grüße,

Ahmad.

&nbsp;

---

<div class="post-metadata">

### Author: ![mbdus](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mbdus/32/12997_2.png) [@mbdus](https://forum.shopware.com/u/mbdus)
#### Post date: [11. November 2016 um 15:17 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/12 "2016-11-11T15:17:16Z")

</div>

Hallo Ahmad,

vielen Dank.

Das SQL wird leider nicht ausgeführt bzw. gleich wieder mit dem Event neu gefüllt… Ich glaube, an der Stelle müssen die Shopbetreiber de- und installieren…

Grüße

Mathias

---

<div class="post-metadata">

### Author: ![mbdus](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mbdus/32/12997_2.png) [@mbdus](https://forum.shopware.com/u/mbdus)
#### Post date: [12. November 2016 um 08:12 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/13 "2016-11-12T08:12:33Z")

</div>

Ich bin wieder etwas weiter. Das Storage wird bereits am Anfang der updatePlugin-Funktion in engine/Shopware/Components/Plugin/Namespace.php eingelesen. D.h. kurzfristig kann ich das Event löschen. Anschließend wird das Event gleich wieder eingefügt. Kann ich das Storage irgendwie in meinem Plugin neu laden lassen? Andernfalls kann ich das Update soweit durchführen, dass ich am Schluss kein return true zurück gebe, dann wird zwar ein Fehler ausgeworfen, aber die Events wurden registriert bzw. entfernt und das Plugin aktualisiert. Das Update (neue Versionsnummer) wird aber erst nach einem Refresh des Pluginmanagers angezeigt. Bis dahin kann der Shopbetreiber immer wieder auf das Update klicken und es passiert nichts bzw. das Update-Icon verschwindet nicht.

---

<div class="post-metadata">

### Author: ![mbdus](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mbdus/32/12997_2.png) [@mbdus](https://forum.shopware.com/u/mbdus)
#### Post date: [14. November 2016 um 11:33 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/14 "2016-11-14T11:33:05Z")

</div>

Da ich die bestehnden Subscribes nicht überschreiben kann, habe ich mir jetzt so beholfen:

```
/**
	 * Update plugin method
	 *
	 */
	public function update(){
		throw new Exception('Please reinstall (de- and install) the plugin!');
	}

```

&nbsp;

---

<div class="post-metadata">

### Author: ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)
#### Post date: [14. November 2016 um 18:28 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/15 "2016-11-14T18:28:22Z")

</div>

Du könntest den Eintrag aus der s\_core\_subscribes Tabelle löschen/ändern. Dort sind diese abgespeichert. Ansonsten würde ich noch “(de- and install)” in “(un- and install)” ändern.&nbsp; ![Wink](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/b3785da0cbf2c8566cb535dcf55b2730b5224899.png "Wink")

Viele Grüße

---

<div class="post-metadata">

### Author: ![mbdus](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mbdus/32/12997_2.png) [@mbdus](https://forum.shopware.com/u/mbdus)
#### Post date: [26. Mai 2017 um 15:00 UTC](https://forum.shopware.com/t/subscribeevent-in-update-funktion/41270/16 "2017-05-26T15:00:49Z")

</div>

In der Update-Funktion kann man keine Events löschen. Nach Abarbeiten der Funktion werden die „alten“ Events alle wieder in die Tabelle geschrieben. Es bleibt nur eine Neuinstallation.
