# Redirect im Subscriber (Plugin)

**URL:** <https://forum.shopware.com/t/redirect-im-subscriber-plugin/98048>\
**Category:** Programmierung\
**Created:** [17. Januar 2023 um 12:02 UTC](https://forum.shopware.com/t/redirect-im-subscriber-plugin/98048 "2023-01-17T12:02:16Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![steam.rene](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/steam.rene/32/19543_2.png) [@steam.rene](https://forum.shopware.com/u/steam.rene)\
**Post date:** [17. Januar 2023 um 12:02 UTC](https://forum.shopware.com/t/redirect-im-subscriber-plugin/98048/1 "2023-01-17T12:02:16Z")

</div>

Moin,

ich habe _CartConvertedEvent_ erweitert um vor dem Bezahlprozess noch einmal den aktuellen Lagerbestand an einer anderen API zu testen. Nun möchte ich bei fehlenden Bestand den Kunden **zurück zum Warenkorb redirecten**. Wie kann ich das am besten anstellen, welchen Service benötige ich dafür?  
Ich habe gesehen, dass man es wohl auch mit einen listener an _KernelEvents::RESPONSE_ erreichen kann, dass scheint mir aber nicht der richtige weg zu sein. Dann würde mein Plugin ja in jeder Abfrage einmal die route testen müssen.

````auto
class CartConvertedEventSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            CartConvertedEvent::class => 'onCartConverted',
        ];
    }

    public function onCartConverted(): void
    {
        $cart = $event->getCart();
        // check if a items is not in stock
        if (!$this->checkStockAvailability($cart)) {
            // Redirect to shopping cart
        }
    }
}```

Besten Dank :pray:
````

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [17. Januar 2023 um 12:47 UTC](https://forum.shopware.com/t/redirect-im-subscriber-plugin/98048/2 "2023-01-17T12:47:16Z")

</div>

Nicht getestet:

```auto
$this->RedirectToRoute('frontend.checkout.cart.page');

```

---

<div class="post-metadata">

**Author:** ![steam.rene](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/steam.rene/32/19543_2.png) [@steam.rene](https://forum.shopware.com/u/steam.rene)\
**Post date:** [17. Januar 2023 um 12:50 UTC](https://forum.shopware.com/t/redirect-im-subscriber-plugin/98048/3 "2023-01-17T12:50:53Z")

</div>

Leider funktioniert das ganze so noch nicht, da die Methode redirectToRoute nicht bekannt ist 🤔

```auto
Attempted to call an undefined method named "redirectToRoute" of class "ProductAvailabilityChecker\Subscriber\Core\CheckoutOrderPlacedEventSubscriber".

```

---

<div class="post-metadata">

**Author:** ![steam.rene](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/steam.rene/32/19543_2.png) [@steam.rene](https://forum.shopware.com/u/steam.rene)\
**Post date:** [17. Januar 2023 um 13:25 UTC](https://forum.shopware.com/t/redirect-im-subscriber-plugin/98048/4 "2023-01-17T13:25:41Z")

</div>

Ich habs jetzt doch endlich hinbekommen ! 🙂

ich habe das RouterInterface als Service in der services.xml aboniert:

```auto
<argument type="service" id="Symfony\Component\Routing\RouterInterface" />

```

Und anschließend im konstruktor initalisiert:

```auto
    public function __construct(RouterInterface $router)
    {
        $this->router = $router;
    }

```

Anschließend kann ich in der Funktion ein redirect durchführen

```auto
   public function onCartConverted(CartConvertedEvent $cartConvertedEvent): void
    {
        // $this->redirectToRoute('frontend.checkout.cart.page');
        $redirectResponse = new RedirectResponse($this->router->generate('frontend.checkout.cart.page'));
        $redirectResponse->send();

```

---

<div class="post-metadata">

**Author:** ![abdullah](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@abdullah](https://forum.shopware.com/u/abdullah)\
**Post date:** [17. Januar 2023 um 13:25 UTC](https://forum.shopware.com/t/redirect-im-subscriber-plugin/98048/5 "2023-01-17T13:25:45Z")

</div>

Ein redirect wird im Subscriber nicht funktionieren, denke ich.

Guck dir den entsprechenden CheckoutController , die entsprechende Methode, an, was bei einer Exception passiert. Eventuell kannst du bei deinem Event eine Exception werfen, so das ein redirect stattfinden kann.

Oder vor der Zahlung, beim Aufrufen des Checkouts/Confirmpage fügst du deinem Cart einen Error hinzu, sodass eine Bestellung nicht durchgeführt werden kann.

---

<div class="post-metadata">

**Author:** ![steam.rene](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/steam.rene/32/19543_2.png) [@steam.rene](https://forum.shopware.com/u/steam.rene)\
**Post date:** [17. Januar 2023 um 13:46 UTC](https://forum.shopware.com/t/redirect-im-subscriber-plugin/98048/6 "2023-01-17T13:46:19Z")

</div>

Vielen Dank für deine Hilfe! 🙂

Ich habe es noch zum laufen bringen können! 🙂

```auto
    public function __construct(RouterInterface $router, CartService $cartService)
    {
        $this->router = $router;
        $this->cartService = $cartService;
    }
    public function onCartConverted(CartConvertedEvent $cartConvertedEvent): void
    {
        $cart = $event->getCart();
        // check if a items is not in stock
        if (!$this->checkStockAvailability($cart)) {
           $redirectResponse = new RedirectResponse($this->router->generate('frontend.checkout.cart.page'));
           $redirectResponse->send();
           die();
        }
    }

```
