Почему я не могу получить доступ к глобальной переменной в моем наблюдателе?


У меня есть пользовательский модуль. В его контроллере я установил глобальную переменную, как показано ниже

public function someAction()
{
    if (<some_condition_met>) {
        $id = 12;
        $item =  Mage::getModel('mymodel/entity')->load($id);
        Mage::register('my_entity', $item); //registering global variable
        $this->_redirect('customer/account/login');
        return;
    }
}

Сейчас я наблюдаю за событием controller_action_postdispatch_customer_account_loginPost. Мне нужно проверить свою глобальную переменную там. Поэтому в своем наблюдателе я попробовал это.

public function myObserver()
{
     if (<some_condition_met>) {
          $item =  Mage::registry('my_entity');
          var_dump($item);
          die();
     }
}

Но он выводит

NULL

Почему я не могу получить глобальную переменную в этом наблюдателе?

Я на 100% уверен, что мой контроллер успешно зарегистрирует это значение. Я пытаюсь передать статическое значение. Это тоже не работает.

Примечание: когда мы пытаемся получить глобальную переменную, заданную контроллером внутри блока, она обязательно вернет данные. Здесь я предполагаю, что я не получаю выходных данных, потому что я пытаюсь получить глобальную переменную во время другого действия контроллера. Я не уверен в этом пункте. Однако это так кажется.

Author: Rajeev K Tomy, 2014-09-17

1 answers

Реестр действителен только для одного запроса. Если вы выполните $this->_redirect(), начнется новый запрос, так что реестр будет сброшен. Вы должны использовать файлы cookie, если хотите хранить информацию по нескольким запросам.

Другая возможность - просто перенаправить на другой контроллер, но это может быть не то, чего вы хотите достичь.

 3
Author: Simon, 2014-09-17 08:35:08