aktuell definieren wir eigene Services per “Enlight_Bootstrap_InitResource_MEIN_SERVICE” Event. Nun wollen wir eine Erweiterung am Suchservice vornehmen, in der wir zum Beispiel eigene Sortierkriterien hinzufügen wollen. Da wir aber keine Tags auf eigenen Services setzen können gestaltet sich das schwierig. Wie kann man das Problem lösen, ohne die service.xml anzupassen?
Da wird beschrieben, wie du eigene Services erzeugst und bestehende dekorierst. Wenn du die StoreFront-Geschichtern erweitern möchtest (eigene Kriterien), könnt dir diese Doku weiter helfen: SearchBundle
Danke für die ausführliche Antwort. Denke das hilft mir für diesen konkreten Fall weiter.
Wäre es technisch grundsätzlich von Euerer Seite aus möglich auf Bundle-Ebene eigene Service-Definitions Dateien zu haben (service.xml) oder geht das aufgrund der Reihenfolge der Initialisierung nicht?
momentan geht das leider nur über das Eventsystem und die service_local. Wir sind aber bereits in der Konzeption für Möglichkeiten, die sich mehr an Bundes orientieren. Aber es gibt noch nichts Verwendbares. Als Möglichkeit für jetztige Plugins habe ich mal meinen „lazy subscriber“ vorgeschlagen, vgl Best practices of Shopware plugin development. Damit kannst du Servicedefinitionen etwas sauberer abbilden. Vom Prinzip her brauchst du mein Library dafür auch gar nicht einbinden, sondern kannst dir einfach einen Subscriber erzeugen, der diese Mechanik für sich implementiert.
Wie gehe ich vor, wenn ich z.B. den Elastic-Search ProductProvider für den Indexer erweitern / ersetzen möchte? Da ich hier auch Deinen LazySubscriber verwende, stoße ich hier gerade an das Problem den Subscriber beim Starten der Console zu registrieren (Shopware_Console_Add_Command?).
Ich baue eine Decorator für den ProductProvider, allerdings ist der Service “shopware_elastic_search.product_provider” zu diesem Zeitpunkt null (weil noch nicht geladen?).
‘shopware_elastic_search.product_provider’ => function (Container $container) {
$productProvider = $container->get(‘shopware_elastic_search.product_provider’);
return new \XX\ProductProviderDecorator(
$productProvider, $container->get(‘models’)
);
}
Theoretisch könnte man den LazySubscriber auch noch so abändern, dass der auch das „AfterInitResource“ unterstützt - aber momentan ist das nicht so, von daher musst du das o.g. Event registrieren / in deinem Sinne abändern. Wie gesagt: Das wird in Zukunft noch einfacher