Hallo,
Ich möchte gerne Services eines anderen Plugins in meinem eigenen Plugin replacen/decoraten.
Orientiert habe ich mich dabei an folgender Anleitung: Service extensions
Allerdings scheint dies nicht für das Erweitern eines Plugin-Services zu funktionieren.
Als Beispiel nehme ich mal den Premium Plugin Advanced Promotion.
Im Container gibt es einen PercentageBasketHandler für den prozentualen Warenkorbrabatt.
In der Bootstrap versuche ich eine Replace Funktion wie folgt zu registrieren:
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();
}
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:
amount / 100));
return new DiscountCommand(10);
}
}
Hat jemand eine Idee, wie man Services, die durch ein anderes Plugin registriert wurden, erweitern/replacen kann?