Przekieruj do adresu URL za pomocą ciągu zapytania

11

W moim module po wykonaniu skryptu muszę dokonać przekierowania na stronę z ciągiem zapytania w adresie URL.

Oto co mam:

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

Próbowałem także:

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

Obie metody zgłaszają błąd: Wystąpił błąd podczas przetwarzania żądania

Oczekuję, że nastąpi przekierowanie http://magento.local/en_en/shop/index?test=1

Czy ktoś wie, jak to osiągnąć?

Edytować:

Zgodnie z sugestią próbowałem:

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

Nie ma błędu, ale nic się nie dzieje. Nie jestem kontrolerem.

Edycja 2:

Skończyło się na tym, że:

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

Działa to zgodnie z oczekiwaniami! Dziękuję Ci.

MrUpsidown
źródło

Odpowiedzi:

9

Dlaczego nie zbudować takiego adresu URL w ten sposób?

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

drugim parametrem setRedirectjest kod przekierowania (301, 302).

Jeśli chcesz wewnętrznie zbudować adres URL, możesz spróbować:

$redirectUrl = Mage::getUrl('module/controller/action', array('_query'=>'test=1'));
Marius
źródło
I wtedy? $this->_redirect($redirectUrl);?
MrUpsidown,
@MrUpsidown. _redirectjeśli jesteś kontrolerem. Jeśli jesteś gdzie indziej:Mage::app()->getResponse()->setRedirect($redirectUrl);
Marius
Nieważne. Dodanie ->sendResponse()na końcu wykonało zadanie!
MrUpsidown,
@MrUpsidown. Przepraszam. Zapomniałem osendResponse
Marius
2

Lepszym sposobem na to jest to.

Mage_Core_Controller_Varien_Action :: _ przekierowanie ('urlpost / index / response', tablica ('_ secure' => true, '_ query' => 'string1 = 417'));
arjun arjun
źródło
0

Jeśli chcesz przekierować na inny adres URL z parametrami zapytania, możesz to zrobić w następujący sposób:

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

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

Spowoduje to przekierowanie do: http: //magento.local/en_en/shop/index? Test = 1 & test = 2

Willster
źródło
0

Jeśli skończyłeś tutaj z Google, używasz kontrolera i chcesz przekierować do innego, zachowując argumenty, których możesz użyć:

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

Gdzie module, controlleri actionmogą być zastąpione *, aby zachować jego wartość. Kolejna akcja w tym samym kontrolerze:

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

Ta sama nazwa akcji, kontroler rodzeństwa:

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

I tak dalej...

Iskra
źródło