Rediriger vers l'URL avec la chaîne de requête

11

Dans mon module, après l'exécution de mon script, j'ai besoin de faire une redirection vers une page avec une chaîne de requête dans l'URL.

Voici ce que j'ai:

$redirectUrl = 'http://magento.local/en_en/shop/index';
$redirectArgs = array('test' => '1');
$this->_redirect($redirectUrl, $redirectArgs);

J'ai aussi essayé:

Mage::app()->getFrontController()->getResponse()->setRedirect($redirectUrl, $redirectArgs)->sendResponse();

Les deux méthodes génèrent une erreur: une erreur s'est produite lors du traitement de votre demande

Ce que j'attends, c'est d'être redirigé vers http://magento.local/en_en/shop/index?test=1

Est-ce que quelqu'un sait comment je peux y arriver?

Éditer:

Comme suggéré, j'ai essayé:

$redirectUrl = 'http://magento.local/en_en/shop/index?test=1';
Mage::app()->getResponse()->setRedirect($redirectUrl);

Aucune erreur, mais rien ne se passe. Je ne suis pas dans un contrôleur.

Modifier 2:

J'ai fini par utiliser:

$redirectUrl = 'http://magento.local/en_en/shop/index?test=1';
Mage::app()->getResponse()->setRedirect($redirectUrl)->sendResponse();

Cela fonctionne comme prévu! Je vous remercie.

MrUpsidown
la source

Réponses:

9

Pourquoi ne pas simplement créer l'URL comme ça?

 $redirectUrl = 'http://magento.local/en_en/shop/index?test=1';

le deuxième paramètre de setRedirectest pour le code de redirection (301, 302).

Si vous souhaitez créer l'URL en interne, vous pouvez essayer ceci:

$redirectUrl = Mage::getUrl('module/controller/action', array('_query'=>'test=1'));
Marius
la source
Puis? $this->_redirect($redirectUrl);?
MrUpsidown
@MrUpsidown. _redirectsi vous êtes dans un contrôleur. Si vous êtes ailleurs:Mage::app()->getResponse()->setRedirect($redirectUrl);
Marius
Ça ne fait rien. L'ajout ->sendResponse()à la fin a fait l'affaire!
MrUpsidown
@MrUpsidown. Pardon. J'ai oubliésendResponse
Marius
2

La meilleure façon de le faire est comme ça.

Mage_Core_Controller_Varien_Action :: _ redirect ('urlpost / index / response', array ('_ secure' => true, '_ query' => 'string1 = 417'));
arjun arjun
la source
0

Si vous souhaitez rediriger vers une autre URL avec des paramètres de requête, vous pouvez le faire comme ceci:

$redirectUrl = 'http://magento.local/en_en/shop/index';
$query_parameters = array(
                '_query'=> array(
                    'test' => '1',
                    'test'=>'2'
                )
            );

$this->_redirect($redirectUrl, $query_parameters);

Cela vous redirigera vers: http: //magento.local/en_en/shop/index? Test = 1 & test = 2

Willster
la source
0

Si vous vous êtes retrouvé ici de Google, utilisez un contrôleur et souhaitez rediriger vers un autre en préservant les arguments que vous pouvez utiliser:

$this->_redirect('module/controller/action', $this->getRequest()->getParams());

module, controlleret actionpeut être remplacé par *pour conserver sa valeur. Une autre action dans le même contrôleur:

$this->_redirect('*/*/anotherAction', $this->getRequest()->getParams());

Même nom d'action, contrôleur frère:

$this->_redirect('*/sibling/*', $this->getRequest()->getParams());

Etc...

Étincelle
la source