ProductHydrator Decorator

Hallo ich versuche den ProductHydrator 

Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\ProductHydrator

mit einem Decorator zu erweitern, leider komme ich nicht weiter, ich bekomme immer wieder Fehler.

Meine services.xml:

 

und die entsprechende ProductHydrator in meinem Plugin:

namespace Namespace\Bundle;

use Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator;


class ProductHydrator implements Hydrator
{
    private $originalService;


    public function __construct($service)
    {
        $this->originalService = $service;
    }

}

Fehler:

 Uncaught TypeError: Argument 4 passed to Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\PriceHydrator::__construct() must be an instance of Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\ProductHydrator, instance of Namespace\Bundle\ProductHydrator given.

Wenn ich den __construct aber umbaue:

public function __construct(Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\ProductHydrator $service)
// ...

bekomme ich:

Uncaught TypeError: Argument 1 passed to Namespace\Bundle\ProductHydrator::__construct() must be an instance of Namespace\Bundle\Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\ProductHydrator, instance of Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\ProductHydrator given, 

Was mache ich falsch, wie kann ich den ProductHydrator Service mit einem Dekorator erweitern?
 

Hallo,

also den zu Dekorieren halte ich für schwierig da an anderer Stelle konkret nach der Objektinstanz gefragt wird und wenn du den ProductHydrator als Parentklasse definierst muss der Konstruktor gleich viele Parameter haben wie die Elternklasse :frowning:

Was ich probiert habe gerade ist den Service zu überschreiben und dann im Konstruktor die Parameters an den parent zu übergeben und dann die jeweiligen Funktionen zu verändern.

namespace MeinNamespace\Components;

use Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\AttributeHydrator;
use Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\EsdHydrator;
use Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\ManufacturerHydrator;
use Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\TaxHydrator;
use Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\UnitHydrator;
use Shopware\Bundle\StoreFrontBundle\Gateway\DBAL\Hydrator\ProductHydrator as BaseProductHydrator;

class ProductHydrator extends BaseProductHydrator
{

    public function __construct(
        AttributeHydrator $attributeHydrator,
        ManufacturerHydrator $manufacturerHydrator,
        TaxHydrator $taxHydrator,
        UnitHydrator $unitHydrator,
        EsdHydrator $esdHydrator
    )
    {
        parent::__construct($attributeHydrator, $manufacturerHydrator, $taxHydrator, $unitHydrator, $esdHydrator);
    }

    public function hydrateListProduct(array $data)
    {
        ....
        return parent::hydrateListProduct($data); // TODO: Change the autogenerated stub
    }
    
}

nicht unbedingt elegant aber vielleicht ein Ansatz.

Auf die Idee bin ich auch gekommen, fand es aber hässlich deswhalb habe ich gefragt. Trotzdem danke für deine Antwort