# redirect() aus einem plugin bootstrap

**URL:** <https://forum.shopware.com/t/redirect-aus-einem-plugin-bootstrap/14807>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [3. August 2013 um 16:15 UTC](https://forum.shopware.com/t/redirect-aus-einem-plugin-bootstrap/14807 "2013-08-03T16:15:28Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![keksterrrrr](https://avatars.discourse-cdn.com/v4/letter/k/45deac/32.png) [@keksterrrrr](https://forum.shopware.com/u/keksterrrrr)\
**Post date:** [3. August 2013 um 16:15 UTC](https://forum.shopware.com/t/redirect-aus-einem-plugin-bootstrap/14807/1 "2013-08-03T16:15:28Z")

</div>

Hallo, wie kann ich aus einer bootstrap einer plugins geschickt auf die redirect() Methode zugreifen? Ich greife so auf das event zu: ` $this-\>subscribeEvent( "Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_ProductInfoPhp", "onGetFrontendControllerProductInfoPhp" ); ` und muss dann über Umwege die redirect() Methode aus dem Controller nachbauen: ` public function onGetFrontendControllerProductInfoPhp(Enlight\_Event\_EventArgs $arguments) { $controller = $arguments-\>getSubject(); $request = $arguments-\>getRequest(); $url = array( 'sViewport' =\> "detail", 'sArticle' =\> "170" ); // hier wird die redirect() Methode aus Enlight\_Controller\_Action kopiert if (is\_array($url)) { $url = $controller-\>Front()-\>Router()-\>assemble($url); } if (!preg\_match('#^(https?|ftp)://#', $url)) { if (strpos($url, '/') !== 0) { $url = $request()-\>getBaseUrl() . '/' . $url; } $uri = $request()-\>getScheme() . '://' . $request()-\>getHttpHost(); $url = $uri . $url; } $controller-\>Response()-\>setRedirect($url, 301); } ` In $arguments-\>getSubject() existiert die Methode forward() nicht… Wie kann ich also „korrekt“ auf die redirect() Methode der Enlight\_Controller\_Action Klasse zugreifen? Gruß & vielen Dank

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [4. August 2013 um 12:00 UTC](https://forum.shopware.com/t/redirect-aus-einem-plugin-bootstrap/14807/2 "2013-08-04T12:00:22Z")

</div>

Auf die forward() Methode kannst du nur zugreifen, wenn du eine Controller Instanz hast, also wenn du etwa ein Controller Event hast - etwa Enlight\_Controller\_Action\_PreDispatch\_Frontend\_Checkout, dann kannst du über das Subject auch auf die forward() Methode zugreifen. Ich verstehe den Subscribe von dir nicht so ganz, was soll Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_ProductInfoPhp sein?

---

<div class="post-metadata">

**Author:** ![keksterrrrr](https://avatars.discourse-cdn.com/v4/letter/k/45deac/32.png) [@keksterrrrr](https://forum.shopware.com/u/keksterrrrr)\
**Post date:** [4. August 2013 um 16:09 UTC](https://forum.shopware.com/t/redirect-aus-einem-plugin-bootstrap/14807/3 "2013-08-04T16:09:56Z")

</div>

[quote=„shredding“]Auf die forward() Methode kannst du nur zugreifen, wenn du eine Controller Instanz hast[/quote] Genau das ist mein Problem 😕 Weißt du einen besseren Umweg, als den den ich gegangen bin?! [quote=„shredding“]Ich verstehe den Subscribe von dir nicht so ganz, was soll Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_ProductInfoPhp sein?[/quote] Dieses event wird ausgelöst, wenn Shopware versucht auf den ProductInfoPhp controller zu routen. Ich versuche gerade alte xt:commerce Links abzufangen, die etwa so aussehen: [http://www.domain.de/product\_info.php/i … tikel.html](http://www.domain.de/product%5C_info.php/info/p123%5C_artikel.html) Durch die schönen neuen developer tools habe ich gesehen, dass ich mich an das Event „Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_ProductInfoPhp“ hängen kann, was eben genau dann ausgelöst wird, wenn ein alter xtc Link aufgerufen wurde. Oder gibt es auch andere Events, an die ich mich hängen kann? Gruß & vielen Dank

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [4. August 2013 um 21:00 UTC](https://forum.shopware.com/t/redirect-aus-einem-plugin-bootstrap/14807/4 "2013-08-04T21:00:28Z")

</div>

Ich hab leider keine Ahnung wovon du redest. Was sind die schönen neuen Developer Tools? Das Event von dir gibt’s im Core nicht. Ich vermute es ist Teil des Migrationsplugins?

---

<div class="post-metadata">

**Author:** ![waldicom](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/waldicom/32/12881_2.png) [@waldicom](https://forum.shopware.com/u/waldicom)\
**Post date:** [4. August 2013 um 21:04 UTC](https://forum.shopware.com/t/redirect-aus-einem-plugin-bootstrap/14807/5 "2013-08-04T21:04:42Z")

</div>

[quote=“shredding”]Ich hab leider keine Ahnung wovon du redest. Was sind die schönen neuen Developer Tools? Das Event von dir gibt’s im Core nicht. Ich vermute es ist Teil des Migrationsplugins?[/quote] Dieses Event wird dann “gefeuert”, wenn im Frontend der Controller ProductInfoPhp aufgeruden wird. Anders gesagt: wenn der Shop so aufgerufen wird, wird der o.g. Controller aufgerufen: [http://meinshop.de/ProductInfoPhp](http://meinshop.de/ProductInfoPhp) (evtl auch /product\_info.php). Zum Thema selbst: evtl. könnte man beim Aufruf des Controllers einen Flag setzen und in einem später aufgerufenen Event den Flag analysieren und den Kunden weiterleiten?

---

<div class="post-metadata">

**Author:** ![shredding](https://avatars.discourse-cdn.com/v4/letter/s/8797f3/32.png) [@shredding](https://forum.shopware.com/u/shredding)\
**Post date:** [4. August 2013 um 21:35 UTC](https://forum.shopware.com/t/redirect-aus-einem-plugin-bootstrap/14807/6 "2013-08-04T21:35:35Z")

</div>

Müsste das dann nicht Enlight\_Controller\_Action\_PreDispatch\_Frontend\_ProductInfoPhp sein? Und wenn dem so wäre, könnte man ja auch die redirect() Methode aus dem Subject aufrufen …

---

<div class="post-metadata">

**Author:** ![waldicom](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/waldicom/32/12881_2.png) [@waldicom](https://forum.shopware.com/u/waldicom)\
**Post date:** [4. August 2013 um 21:39 UTC](https://forum.shopware.com/t/redirect-aus-einem-plugin-bootstrap/14807/7 "2013-08-04T21:39:13Z")

</div>

Nein, (eigene) Controller werden auf diese Weise eingebunden: Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_\<controller\_name\> (oder _Backend_, wenn das ein Backend Controller ist).\</controller\_name\>

---

<div class="post-metadata">

**Author:** ![keksterrrrr](https://avatars.discourse-cdn.com/v4/letter/k/45deac/32.png) [@keksterrrrr](https://forum.shopware.com/u/keksterrrrr)\
**Post date:** [4. August 2013 um 21:51 UTC](https://forum.shopware.com/t/redirect-aus-einem-plugin-bootstrap/14807/8 "2013-08-04T21:51:37Z")

</div>

[quote=„shredding“]Was sind die schönen neuen Developer Tools?[/quote] Siehe [http://store.shopware.de/administration … bar?c=2153](http://store.shopware.de/administration/entwicklertoolbar?c=2153) Vielleicht eine etwas irritierende Bezeichnung von mir. [quote=„waldicom“]Dieses Event wird dann „gefeuert“, wenn im Frontend der Controller ProductInfoPhp aufgeruden wird[/quote] Korrekt - und da befinde ich mich nicht innerhalb eines controllers, um redirect() aufzurufen. Hast du vlt noch Ideen waldicom? Mein aktueller Ansatz: ich klinke mich in das Event Enlight\_Controller\_Action\_Init\_Frontend\_Index ein und prüfe den controller aus dem request. Dieses event wird ausgelöst, nachdem kein ProductInfoPhp controller gefunden wurde und direkt auf die Startseite weitergeleitet wird: ` public function onInitFrontendIndexEvent(Enlight\_Event\_EventArgs $arguments) { $controller = $arguments-\>getSubject(); $request = $arguments-\>getRequest(); $params = $request-\>getParams(); switch ( $params['controller'] ) { // product details case "product\_info.php": // product\_info.php/info/p1234\_Artikelname.html $this-\>redirectProductInfo( $controller, $params ); break; // ... } } ` Das ist mir nur ein wenig zu unsauber, da dieses Event bei jedem Aufruf der Startseite gefeuert wird 😕 Gruß

---

<div class="post-metadata">

**Author:** ![Thomas](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomas/32/8167_2.png) [@Thomas](https://forum.shopware.com/u/Thomas)\
**Post date:** [5. August 2013 um 09:45 UTC](https://forum.shopware.com/t/redirect-aus-einem-plugin-bootstrap/14807/9 "2013-08-05T09:45:54Z")

</div>

Also bei einem onPostDispatch Event habe ich wie folgt die “Redirect Methode” verwendet: ` public function onPostDispatch(Enlight\_Event\_EventArgs $args) { $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); $view = $args-\>getSubject()-\>View(); if (!$request-\>isDispatched() || $response-\>isException() || $request-\>getModuleName() != 'frontend' || !$view-\>hasTemplate() ) { return; } $ControllerName = $request-\>getControllerName(); if ($ControllerName == 'index') { $articleId = 1; $request-\>setParams(array('sArticle' =\> $articleId)); $request-\>setControllerName('detail'); $request-\>setActionName('index')-\>setDispatched(false); } }` Eventuell hilft dir das weiter?
