Hallo allerseits, ich stoße immer wieder an das Problem, dass ich nicht weiß, was die redirect() Methode für Parameter erwartet… So funktioniert es zwar: $redirect = array( 'module' =\> "frontend", 'controller' =\> "checkout", 'action' =\> "cart" ); $this-\>redirect( $redirect, "bla" );
und so lande ich auch im Warenkorb, aber den zweiten Parameter “bla” muss ich angeben, damit ich weiter geleitet werde. Es ist vollkommen egal, was ich als zweiten Parameter angebe - aber er muss anscheinend vorhanden sein. Wenn ich den zweiten Parameter weglasse, dann wird einfach nicht weiter geleitet… Wie mache ich es richtig?! Wie habe ich redirect() zu nutzen? Und an dieser Stelle: wie mache ich einen 301 “permanently moved” redirect? Vielen Dank & Gruß
hi, soweit ich weiß ist der 2te Parameter für die HTTP Header zuständig. siehe: http://wiki.shopware.de/_doc-sw4/classes/Enlight_Controller_Action.html#method_redirect wenn Du deinen Parameter mitgeben willst dann einfach mit ins Array packen: $redirect = array( 'module' =\> 'frontend', 'controller' =\> 'checkout', 'action' =\> 'cart', 'bla' =\> 'asdf' ); $this-\>redirect($redirect);
Ok… das ist extrem merkwürdig. Mein redirect() funktioniert nun auch, wenn ich den zweiten Parameter weg lasse. Übrigens zur Frage mit dem 301 header: /\*\* \* Redirect the request. The frontend router will assemble the url. \* \* @param string|array $url \* @param array $options \*/ public function redirect($url, array $options = array()) { if (is\_array($url)) { $url = $this-\>Front()-\>Router()-\>assemble($url); } if (!preg\_match('#^(https?|ftp)://#', $url)) { if (strpos($url, '/') !== 0) { $url = $this-\>Request()-\>getBaseUrl() . '/' . $url; } $uri = $this-\>Request()-\>getScheme() . '://' . $this-\>Request()-\>getHttpHost(); $url = $uri . $url; } $this-\>Response()-\>setRedirect($url, empty($options['code']) ? 302 : (int) $options['code']); }
Es reicht also ein array( ‘code’ => 301 ) als zweiten Parameter zu übergeben. Gruß & vielen Dank
Hi zusammen, wenn Ihr innerhalb von Shopware Controllern redirecten wollt, verwendet bitte $this->forward(); Dieser ist auch sehr viel angenehmer zu bedienen. Gruß Oliver