# Service eines anderen Plugins replacen/decoraten

**URL:** <https://forum.shopware.com/t/service-eines-anderen-plugins-replacen-decoraten/40705>\
**Category:** Programmierung\
**Created:** [21. Oktober 2016 um 08:25 UTC](https://forum.shopware.com/t/service-eines-anderen-plugins-replacen-decoraten/40705 "2016-10-21T08:25:50Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![DenKon26](https://avatars.discourse-cdn.com/v4/letter/d/5e9695/32.png) [@DenKon26](https://forum.shopware.com/u/DenKon26)\
**Post date:** [21. Oktober 2016 um 08:25 UTC](https://forum.shopware.com/t/service-eines-anderen-plugins-replacen-decoraten/40705/1 "2016-10-21T08:25:50Z")

</div>

Hallo,

&nbsp;

Ich möchte gerne Services eines anderen Plugins in meinem eigenen Plugin replacen/decoraten.

Orientiert habe ich mich dabei an folgender Anleitung: [Service extensions](https://developers.shopware.com/developers-guide/shopware-5-core-service-extensions/)

Allerdings scheint dies nicht für das Erweitern eines Plugin-Services zu funktionieren.

&nbsp;

Als Beispiel nehme ich mal den Premium Plugin Advanced Promotion.

Im Container gibt es einen PercentageBasketHandler für den prozentualen Warenkorbrabatt.

&nbsp;

In der Bootstrap versuche ich eine Replace Funktion wie folgt zu registrieren:

&nbsp;

```
use MyPlugins\MyAdvancedPromotionArticlePrice\Components\Promotion\DiscountHandler\BasketHandler\MyPercentageBasketHandler;

[...]

public function install()
{
    $this->subscribeEvent(
        'Enlight_Bootstrap_InitResource_shopware_storefront.promotion.discount.basket.percentage',
        'replaceService',
        500
    );

    return true;
}

public function afterInit()
{
    /** @var Enlight_Loader $loader */
    $loader = $this->get('loader');

    $loader->registerNamespace(
        'MyPlugins\\MyAdvancedPromotionArticlePrice',
        $this->Path()
    );
}

public function replaceService()
    {
        return new MyPercentageBasketHandler();
    }

```

&nbsp;

In meiner MyPercentageBasketHandler php habe ich die Standard-Methode drin und gebe testweise einen konstanten Amoun zurück - dieser wird allerdings nirgends übernommen bzw. das Registrieren der replaceService-Methode in der Bootstrap scheint schon nicht zu funktionieren:

&nbsp;

```
amount / 100));
        return new DiscountCommand(10);
    }
}

```

&nbsp;

Hat jemand eine Idee, wie man Services, die durch ein anderes Plugin registriert wurden, erweitern/replacen kann?

---

<div class="post-metadata">

**Author:** ![Moritz\_Naczenski](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/moritz_naczenski/32/7792_2.png) [@Moritz\_Naczenski](https://forum.shopware.com/u/Moritz_Naczenski)\
**Post date:** [21. Oktober 2016 um 08:29 UTC](https://forum.shopware.com/t/service-eines-anderen-plugins-replacen-decoraten/40705/2 "2016-10-21T08:29:15Z")

</div>

Hallo,

hilft dir das hier vielleicht?

[https://developers.shopware.com/developers-guide/plugin-extension-by-plugin/](https://developers.shopware.com/developers-guide/plugin-extension-by-plugin/)

Moritz

---

<div class="post-metadata">

**Author:** ![DenKon26](https://avatars.discourse-cdn.com/v4/letter/d/5e9695/32.png) [@DenKon26](https://forum.shopware.com/u/DenKon26)\
**Post date:** [25. Oktober 2016 um 10:26 UTC](https://forum.shopware.com/t/service-eines-anderen-plugins-replacen-decoraten/40705/3 "2016-10-25T10:26:24Z")

</div>

> [@Moritz Naczenski schrieb:](https://forum.shopware.com/profile/14574/Moritz%20Naczenski "Moritz%20Naczenski")
> 
> Hallo,
> 
> hilft dir das hier vielleicht?
> 
> [https://developers.shopware.com/developers-guide/plugin-extension-by-plugin/](https://developers.shopware.com/developers-guide/plugin-extension-by-plugin/)
> 
> Moritz

Also das Registrieren des neuen Services anhand des alten Services versuche ich ja genauso - nur halt mit dem alten Plugin System.

Liegt es am alten Plugin System? Oder ist beim Registrieren des Events schlicht das Event falsch?

```
Enlight_Bootstrap_InitResource_shopware_storefront.promotion.discount.basket.percentage

```

Ist dieses Event vielleicht falsch?&nbsp;

---

<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:** [26. Oktober 2016 um 08:26 UTC](https://forum.shopware.com/t/service-eines-anderen-plugins-replacen-decoraten/40705/4 "2016-10-26T08:26:41Z")

</div>

Hallo DenKon26,

ich habe eine Frage, ist “DiscountHandler” ein Interface oder ein Class ??

Viele Grüße,

Ahmad

---

<div class="post-metadata">

**Author:** ![DenKon26](https://avatars.discourse-cdn.com/v4/letter/d/5e9695/32.png) [@DenKon26](https://forum.shopware.com/u/DenKon26)\
**Post date:** [26. Oktober 2016 um 08:40 UTC](https://forum.shopware.com/t/service-eines-anderen-plugins-replacen-decoraten/40705/5 "2016-10-26T08:40:31Z")

</div>

> [@ahmadsaad schrieb:](https://forum.shopware.com/profile/24684/ahmadsaad "ahmadsaad")
> 
> Hallo DenKon26,
> 
> ich habe eine Frage, ist „DiscountHandler“ ein Interface oder ein Class ??
> 
> Viele Grüße,
> 
> Ahmad

DiscountHandler ist ein Interface. Ich habe schon fast die Vermutung, dass das decoraten eines Services eines anderen Plugins nur mit dem neuen Plugin System geht…

---

<div class="post-metadata">

**Author:** ![DenKon26](https://avatars.discourse-cdn.com/v4/letter/d/5e9695/32.png) [@DenKon26](https://forum.shopware.com/u/DenKon26)\
**Post date:** [26. Oktober 2016 um 09:50 UTC](https://forum.shopware.com/t/service-eines-anderen-plugins-replacen-decoraten/40705/6 "2016-10-26T09:50:22Z")

</div>

Das ist mir jetzt sehr peinlich.

Das Problem saß mal wieder vor dem Rechner :-/

Ich hatte beim Klassennamen meines Services einen Buchstabendreher drin, wodurch mein Service nicht gefunden wurde und beim Replacen der Shop auf der Warenkorbseite einen 503 Error warf.

&nbsp;
