# Weiterleitungen mit redirect Funktion

**URL:** <https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927>\
**Category:** Programmierung\
**Created:** [23. September 2019 um 10:20 UTC](https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927 "2019-09-23T10:20:04Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![squeezedLemon](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@squeezedLemon](https://forum.shopware.com/u/squeezedLemon)\
**Post date:** [23. September 2019 um 10:20 UTC](https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927/1 "2019-09-23T10:20:04Z")

</div>

Hi,&nbsp;

in Shopware 5 bekomme ich ja über&nbsp;$args-\>getSubject(); eine redirect methode, wenn ich in einem Subscriber bin.

Also sowas:&nbsp;

```
public function onPostDispatch(\Enlight_Event_EventArgs $args) {
    $subject = $args->getSubject();
    $subject->redirect([
        'controller' => 'index',
         'action' => 'index'
     ]);
    }
}

```

&nbsp;

Gibt es so eine Methode auch bei Shopware 6, wenn ich einen EventSubscriberInterface implementiere?

Ich würde gerne von einer Seite zur anderen weiterleiten in meinem Plugin.

&nbsp;

Viele Grüße

---

<div class="post-metadata">

**Author:** ![Shopwareianer](https://avatars.discourse-cdn.com/v4/letter/s/b4bc9f/32.png) [@Shopwareianer](https://forum.shopware.com/u/Shopwareianer)\
**Post date:** [23. September 2019 um 10:29 UTC](https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927/2 "2019-09-23T10:29:17Z")

</div>

Schau dir die bestehenden Controller an.

[https://github.com/shopware/platform/blob/cb1475e00dde8d30fa3c72e68bd48bb8e80475ac/src/Storefront/Controller/RegisterController.php#L81](https://github.com/shopware/platform/blob/cb1475e00dde8d30fa3c72e68bd48bb8e80475ac/src/Storefront/Controller/RegisterController.php#L81)

oder&nbsp;[https://github.com/shopware/platform/blob/98e2cc6672a40a671d9d3a86b737f5ae52c55cec/src/Storefront/Controller/ContextController.php#L73](https://github.com/shopware/platform/blob/98e2cc6672a40a671d9d3a86b737f5ae52c55cec/src/Storefront/Controller/ContextController.php#L73)

Oder hier den Subscriber:&nbsp;[https://github.com/shopware/platform/blob/c70ab2605ccf7d55202b2eb8ef368143664908ea/src/Storefront/Framework/Routing/StorefrontSubscriber.php#L152-L157](https://github.com/shopware/platform/blob/c70ab2605ccf7d55202b2eb8ef368143664908ea/src/Storefront/Framework/Routing/StorefrontSubscriber.php#L152-L157)

---

<div class="post-metadata">

**Author:** ![squeezedLemon](https://avatars.discourse-cdn.com/v4/letter/s/a87d85/32.png) [@squeezedLemon](https://forum.shopware.com/u/squeezedLemon)\
**Post date:** [23. September 2019 um 10:49 UTC](https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927/3 "2019-09-23T10:49:27Z")

</div>

Schon mal vielen Dank!

Aber bei mir passt es mit den Objekten so nicht ganz.  
Ich versuche weiterzuleiten, wenn ich auf einen bestimmten Controller zugreife.&nbsp;

In dem gezeigten Subscriber hängt er sich aber an&nbsp;KernelEvents::EXCEPTION und in der Methode kommt ein ExceptionEvent als Parameter.

Ich habe noch versucht mich in KernelEvents::CONTROLLER zu hängen, denn über den Controller könnte ich ja auch redirecten.  
Aber auf die Weise gibt es nur 500er Fehler.

Also so ganz hilft mir das leider noch nicht ☹

&nbsp;

Edit: Ich habe mir nun über die services.xml einfach einen&nbsp;importiert. Leider ist die Methode redirectTo protected, sodass sie mir in EventSubscriber nichts bringt…

Edit2: Ich habe nun einen eigenen Controller geschrieben, der meine gewünschte Route&nbsp;überschreibt. So kann ich auf die redirectToRoute Methode zugreifen und weiterleiten, sobald jemand auf die Route zugreifen will. Thanks to @SorinSologics2019‍

&nbsp;

Die Frage, ob/wie man innerhalb eines EventSubscribers weiterleiten kann, bleibt trotzdem.  
In Shopware 5 war das ja auch auf sehr einfache Weise möglich. Wäre schade, wenn es in Shopware 6 nur über CustomController gehen würde.

---

<div class="post-metadata">

**Author:** ![compragmbh](https://avatars.discourse-cdn.com/v4/letter/c/d07c76/32.png) [@compragmbh](https://forum.shopware.com/u/compragmbh)\
**Post date:** [29. November 2019 um 11:20 UTC](https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927/4 "2019-11-29T11:20:33Z")

</div>

Hallo Zusammen,

&nbsp;

Wir haben vorerst einen Weg gefunden, aus einem Subscriber auf eine andere Seite weiterzuleiten.

Verwendet wird hierfür das Event **KernelEvents::REQUEST** welches die Bearbeitung von Requests und Responses erlaubt.

Anschließend kann bspw. die aufgerufene Route geprüft werden. Wichtig ist, dass nur in bestimmten Fällen weitergeleitet wird, da man sonst eine Endlosschleife erzeugt:

&nbsp;

```
/**
 * @return array
 */
public static function getSubscribedEvents()
{
    return [
        KernelEvents::REQUEST => 'onHandleRequest'
    ];
}

/**
 * Handles Kernel requests. Test redirect account home page to home page of shop.
 *
 * @param RequestEvent $event
 */
public function onHandleRequest(RequestEvent $event)
{
    // get current request route
    $route = $event->getRequest()->attributes->get('_route');

    // only redirect if account overview page was called
    if ($route === 'frontend.account.home.page') {

        // generate url from home page route
        $url = $this->container->get('router')->generate('frontend.home.page');

        // set RedirectResponse as response of the event
        $event->setResponse(new RedirectResponse($url));      
    }
}

```

&nbsp;

Viele Grüße

Dennis

---

<div class="post-metadata">

**Author:** ![Adelbert](https://avatars.discourse-cdn.com/v4/letter/a/b782af/32.png) [@Adelbert](https://forum.shopware.com/u/Adelbert)\
**Post date:** [11. März 2020 um 09:55 UTC](https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927/5 "2020-03-11T09:55:46Z")

</div>

Hallo Dennis,

wie hast du den Container dem Subscriber übergeben, sodass du

```
$this->container

```

aufrufen kannst?

---

<div class="post-metadata">

**Author:** ![compragmbh](https://avatars.discourse-cdn.com/v4/letter/c/d07c76/32.png) [@compragmbh](https://forum.shopware.com/u/compragmbh)\
**Post date:** [11. März 2020 um 13:21 UTC](https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927/6 "2020-03-11T13:21:08Z")

</div>

> [@Adelbert schrieb:](https://forum.shopware.com/profile/27851/Adelbert "Adelbert")
> 
> Hallo Dennis,
> 
> wie hast du den Container dem Subscriber übergeben, sodass du
> 
> $this-\>container
> 
> aufrufen kannst?

Hallo!

Einfach in der services.xml den Subscriber registrieren und den service\_container als Argument übergeben:

Anschließend kann dann der container im Constructor des Subscribers als Variable gesetzt werden:

```
/** @var ContainerInterface */
private $container;

/** @var SystemConfigService */
private $systemConfig;

public function __construct(ContainerInterface $container, SystemConfigService $systemConfig)
{
    $this->container = $container;
    $this->systemConfig = $systemConfig;
}

```

&nbsp;

Viele Grüße  
Dennis

---

<div class="post-metadata">

**Author:** ![php\_schmiede](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/php_schmiede/32/13458_2.png) [@php\_schmiede](https://forum.shopware.com/u/php_schmiede)\
**Post date:** [20. August 2020 um 09:13 UTC](https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927/7 "2020-08-20T09:13:42Z")

</div>

Hallo,

&nbsp;

wie bekomme ich auf dem Event “KernelEvents::REQUEST” den salesChannelContext?

Ich muss ein Produkt laden, aber ohne diesen Context geht es anscheinend nicht.

---

<div class="post-metadata">

**Author:** ![mit3233](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@mit3233](https://forum.shopware.com/u/mit3233)\
**Post date:** [21. August 2020 um 04:04 UTC](https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927/8 "2020-08-21T04:04:59Z")

</div>

Hey,

da hänge ich mal dran, ich habe das gleiche Problem. Sales-Channel-Id habe ich, brauche aber den Sales-Channel-Context.

&nbsp;

---

<div class="post-metadata">

**Author:** ![lucamario](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/lucamario/32/15269_2.png) [@lucamario](https://forum.shopware.com/u/lucamario)\
**Post date:** [16. Dezember 2021 um 18:08 UTC](https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927/9 "2021-12-16T18:08:53Z")

</div>

Hat hier jemand eine Lösung gefunden wie man an den Context kommt? Möchte einen Redirect machen je nach dem ob ein Kunde eingeloggt ist oder nicht.

---

<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:49 UTC](https://forum.shopware.com/t/weiterleitungen-mit-redirect-funktion/61927/10 "2023-01-17T13:49:02Z")

</div>

Falls noch jemand vor dem Problem steht. Ich habe es so lösen können.

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
    {
        $redirectResponse = new RedirectResponse($this->router->generate('frontend.checkout.cart.page'));
        $redirectResponse->send();
        die()
     }

```
