У меня проблема с сообщениями magento. Я создаю пользовательский модуль, который теоретически должен иметь возможность ограничить доступ к некоторым частям магазина. Я создал наблюдателя, который подключается к событию controller_action_predispatch
и проверяет, может ли пользователь запрашивать текущий запрос. Если действие не может быть доступно, наблюдатель перенаправляет пользователя и устанавливает информацию об ошибке. Я хочу настроить URL-адрес перенаправления на страницу, с которой клиент приходит, чтобы не нажимать на весь магазин. Я смотрю на HTTP_REFERER
и использую его, если он установлен, иначе я перенаправляю клиента на домашнюю страницу. Проблема в том, что в последнем случае (перенаправление домашней страницы) все работает отлично, но когда я устанавливаю url на основе референта, я не вижу сообщения об ошибке в окне сообщения.
Код от наблюдателя ($name
variable - строка):
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);
Интересным является то, что если я сделаю какое-либо изменение в файле наблюдателя и сохраню его, то следующий запрос, который выходит из строя и перенаправляется на URL-адрес референта, отображает информацию об ошибке, но любое последующее сообщение теряет сообщения.
Я думал, что проблема заключается в полном url и моем локальном установлении (я использую .local domain), но поэтому я попытался добавить
$url = str_replace(Mage::getBaseUrl(), '/', $url);
но это не помогло.
Я также попытался перенаправить, используя php header()
функцию без какого-либо результата.
Все кеширование отключено. Рабочий процесс, который вызывает проблему, выглядит следующим образом:
- Я собираюсь перейти на любую доступную страницу (например, клиент/учетная запись).
- Нажмите на ссылку тележки (корзина для этой учетной записи отключена)
- Возврат в/клиент/учетную запись и сообщение об ошибке отображается
- Нажмите ссылку на тележку снова
- Возврат в/клиент/аккаунт, но не сообщение об ошибке
Любой намек на то, где искать, будет оценен.