Sition
12. Februar 2019 um 12:06
1
Hallo zusammen, wir haben eine Frage zum extending der Services.
Wir möchten den ListProductService erweitern, ABER wir benötigen keine erweiterung (die zusätzliche daten abruft) auf den checkout -Seiten.
Gibt es eine möglichkeit, die ausdehnung auf bestimmte Controller / Action zu beschränken?
Wenn wir die services.xml implementieren, scheint der Service auf jeder Seite zu erweitern:
Hallo Sition,
versuche mal folgendes (ungetestet)
und dann der Decorator:
namespace SwagFoo;
use Shopware\Bundle\StoreFrontBundle\Service\ListProductServiceInterface;
use Shopware\Bundle\StoreFrontBundle\Struct;
class ListProductServiceDecorator implements ListProductServiceInterface
{
/**
* @var ListProductServiceInterface
*/
private $coreListProductService;
/**
* @var \Enlight_Controller_Front
*/
private $front;
public function __construct(ListProductServiceInterface $coreListProductService, \Enlight_Controller_Front $front)
{
$this->coreListProductService = $coreListProductService;
$this->front = $front;
}
public function getList(array $numbers, Struct\ProductContextInterface $context)
{
if ($this->front->Request()->getControllerName() === 'checkout') {
return $this->coreListProductService->getList($numbers, $context);
}
// return custom stuff
}
public function get($number, Struct\ProductContextInterface $context)
{
if ($this->front->Request()->getControllerName() === 'checkout') {
return $this->coreListProductService->get($number, $context);
}
// return custom stuff
}
}
So prüfst du im Request, welcher Controller aufgerufen wird und kannst dann entsprechend reagieren.
Viele Grüße aus Schöppingen
Michael Telgmann