Mam problem z wiadomościami magento. Buduję moduł niestandardowy, który teoretycznie powinien być w stanie ograniczyć dostęp do niektórych części sklepu. Stworzyłem obserwatora, który łączy się ze zdarzeniem controller_action_predispatch
i sprawdza, czy użytkownik może uzyskać dostęp do bieżącego żądania. Jeśli akcja nie jest dostępna, obserwator przekierowuje użytkownika i ustawia informacje o błędzie. Chcę ustawić adres URL przekierowania na stronę, z której pochodzi klient, aby uniknąć kliknięcia w cały sklep. Patrzę na HTTP_REFERER
i używam go, jeśli jest ustawiony, w przeciwnym razie przekierowuję klienta na stronę główną. Problem polega na tym, że w późniejszym przypadku (przekierowanie na stronie głównej) wszystko działa świetnie, ale gdy ustawiam adres URL na podstawie odnośnika, nie widzę komunikatu o błędzie w oknie komunikatu.Magento traci wiadomości po przekierowaniu
Kod od obserwatora ($name
zmienna jest ciągiem znaków):
Mage::getSingleton('core/session')->addError('Acces to '.$name.' section is denied');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getResponse()->setRedirect($url);
Co znalazłem interesujące jest, że jeśli będę robić żadnych zmian w pliku obserwatora i zapisać go, a następnie kolejna prośba, która kończy się niepowodzeniem i zostanie przekierowany do adresu URL odsyłacza, pokazuje informacje o błędzie, ale każdy kolejny traci wiadomości.
Myślałam, że problem jest w pełny adres URL i mój lokalny instalacyjne (używam domeny .local), ale tak próbowałem dodając
$url = str_replace(Mage::getBaseUrl(), '/', $url);
ale to nie pomogło.
Próbowałem również przekierowania za pomocą funkcji php header()
, ale bez żadnego wyniku.
Cała pamięć podręczna jest wyłączona. Workflow, która wywołuje problem jest następujący:
- Idę do każdej dostępnej strony (na przykład/klienta/konta)
- Kliknij na odnośnik koszyka (koszyk na tym koncie jest wyłączona)
- Powrót do/klienta/konta i wyświetlany jest komunikat o błędzie
- Kliknij koszyka linku ponownie
- Powrót do/klienta/konta, ale bez komunikatu o błędzie
Każda wskazówka, gdzie szukać, zostanie doceniona.
Czy możesz dezaktywować wszystkie swoje pamięci podręczne (+ FPC, jeśli Magento EE), aby sprawdzić, czy jest to problem z pamięcią podręczną? A propos, nie zrozumiałem wszystkich twoich wyjaśnień, zrozumiałeś, że komunikaty o błędach sesji są usuwane po pierwszym wyświetleniu? –
Rozszerzyłem opis, mam nadzieję, że teraz jest jasne. – Zefiryn