Service einer anderen Erweiterung ersetzen

Hi,

meine Anpassung funktioniert nur mit deaktiviertem Cache, sobald ich den Cache aktivieren wird der Service niemals ersetzt. Im Cache unter Proxies steht auch der falsche Namepsace… gibt es da eine Möglichkeit die Reihenfolge in der .xml anzupassen? Ich möchte es nicht dekorieren, da es so nicht funktionieren würde. Es gäbe noch die Events „…_InitResource“ die sind aber dann wieder zu spät und erzeugen neue Probleme… Ist halt doof, wenn keine Interfaces benützt werden…

Hm, dann vielleicht die „Anpassung” ändern?

Ich konnte es lösen, in dem ich einen eigenen CompilerPass hinzugefügt habe und die Klasse an der Definition noch zusätzlich geändert habe…

Bsp.:

class CompilerPass implements CompilerPassInterface
{
    /**
     * @param ContainerBuilder $container
     */
    public function process(ContainerBuilder $container)
    {
        if ($container->hasDefinition('swag_promotion.promotion_selector')) {
            $definition = $container->getDefinition('swag_promotion.promotion_selector');
            $definition->setClass(PromotionSelector::class);
        }

Leider gibt es keine andere Möglichkeit die Services kann ich nicht dekorieren da in der alten Version keine Interfaces verwendet wurden… Bzw. was bringt mir das den Service zu dekorieren, wenn in einem anderen Service wieder mit new Class oder beim Constructor kein Interface angegeben wurde. Frage mich nur warum das Ersetzen eines Services mit aktiviertem Cache nicht funktioniert, obwohl das so in den Dev Docs gezeigt wird… Handelt sich um SW5.4.6